LeetCode 19. Remove Nth Node From End of List

Given a linked list, remove the n-th node from the end of list and return its head.

Example:

Given linked list: 1->2->3->4->5, and n = 2.

After removing the second node from the end, the linked list becomes 1->2->3->5.

Note:

Given n will always be valid.

Follow up:

Could you do this in one pass?


/**

 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
   ListNode* removeNthFromEnd(ListNode* head, int n) {
       if(n==1) 
       {
           if(head->next==NULL)
            return NULL;
       }
       ListNode *p=head;
        int num=0;
        while (p)
        {
            num++;
            p=p->next;
        }
        p=head;
        int i=0;
       if(n==num)
       {
           head = head->next;
           return head;
       }  
        while (i+1<num-n)
        {
            p=p->next;
            i++;
        }
       if(p->next==NULL)
           p=NULL;
        else 
            p->next=p->next->next;
        return head;
    }

};

后续要求遍历一次就完成功能。

https://leetcode.com/problems/remove-nth-node-from-end-of-list/discuss/8812/My-short-C++-solution

class Solution
{
public:
    ListNode* removeNthFromEnd(ListNode* head, int n)
    {
        ListNode** t1 = &head, *t2 = head;
        for(int i = 1; i < n; ++i)
        {
            t2 = t2->next;
        }
        while(t2->next != NULL)
        {
            t1 = &((*t1)->next);
            t2 = t2->next;
        }
        *t1 = (*t1)->next;
        return head;
    }
};

猜你喜欢

转载自blog.csdn.net/u013288800/article/details/80520344