19. Remove Nth Node From End of List

来源:互联网 发布:软件开发项目预算表 编辑:程序博客网 时间:2024/06/06 08:22

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

For 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.
Try to 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) {        ListNode *head_new=new ListNode(0);        head_new->next=head;        //if(n==0) return head;        //if(head->next==NULL) return NULL;        ListNode*first=head,*second=head_new;        int num=n;        while(num--)        {            first=first->next;        }        while(first!=NULL)        {            first=first->next;            second=second->next;        }        second->next=second->next->next;        return head_new->next;     }};

思路:
跟之前有一题一样,还是定义一个头结点在链表前面。

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

思路:和之前的题一样,也是用双重链表

0 0
原创粉丝点击