leetcode 19. Remove Nth Node From End of List

来源:互联网 发布:淘宝女装店铺改卖男装 编辑:程序博客网 时间:2024/06/05 22:52

相关问题

Discription

Given a linked list, remove the n-th 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.

思路

双指针:快指针先走n+1步,然后慢指针和快指针同时走。
注意:由于删除的可能是头结点,所以需要一个虚拟的头结点。

时间复杂度:O(n)
空间复杂度:O(1)

代码

/** * 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 *virtualHead = new ListNode(-1);        virtualHead->next = head;        ListNode *pSlow = virtualHead, *pFast = virtualHead;        for (int i = 0; i <= n; i++)            pFast = pFast->next;        while (pFast)        {            pFast = pFast->next;            pSlow = pSlow->next;        }        pSlow->next = pSlow->next->next;        return virtualHead->next;    }};