leetcode19(刪除鏈表倒數第N個節點)--C語言實現

求:node

給定一個鏈表,刪除鏈表的倒數第 n 個節點,而且返回鏈表的頭結點。spa

示例:rem

給定一個鏈表: 1->2->3->4->5, 和 n = 2.List

當刪除了倒數第二個節點後,鏈表變爲 1->2->3->5.
說明:進階

給定的 n 保證是有效的。鏈表

進階:next

你能嘗試使用一趟掃描實現嗎?di

 

解:while

struct  ListNode* removeNthFromEnd( struct  ListNode* head,  int  n){
     int  nodeCount =  0 ;
     int  i;
     struct  ListNode* p = head;
     struct  ListNode* tmp;
     while (p!=NULL){
        nodeCount++;
        p=p->next;
    }
    p=head;
     if (n==nodeCount){
        tmp = head;
        head = head->next;
        free(tmp);
    } else {
         for (i= 0 ;i<nodeCount-n- 1 ;i++){
            p=p->next;
        }
        tmp = p->next;
        p->next=tmp->next;
        free(tmp);
    }
     return  head;
}
 
解:
struct  ListNode* removeNthFromEnd( struct  ListNode* head,  int  n){
     struct  ListNode* p1=( struct  ListNode*)malloc( sizeof ( struct  ListNode));
     struct  ListNode* p2=( struct  ListNode*)malloc( sizeof ( struct  ListNode));
     struct  ListNode* result = p1;
    p1->next = head;
    p2->next = head;
     int  i;
     for (i= 0 ;i<n;i++){
        p2=p2->next;
    }
     while (p2->next!=NULL){
        p2=p2->next;
        p1=p1->next;
    }
     struct  ListNode* tmp = p1->next;
    p1->next=tmp->next;
    free(tmp);
     return  result->next;
}
相關文章
相關標籤/搜索