您的位置:首页 > Web前端 > Node.js

[Leetcode] Remove Nth Node From End of List

2016-11-23 13:18 423 查看
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.
这也是一道面试题,很久之前遇到过。

思路:
使用两个指针,两个指针的距离差要等于N,这样当前一个指针遍历到链表尾时,当前的指针指向倒数第N个结点,特殊情况是链表只有一个结点时或者倒数第N个结点就是首结点

时要注意处理,整个算法时间复杂度O(N):

struct ListNode* removeNthFromEnd(struct ListNode* head, int n)
{
if(head == NULL || n < 0){
return NULL;
}

struct ListNode *p = NULL, *fast = NULL, *tmp = NULL;

p = head;
fast = head;

while(fast && n){
fast = fast->next;
n --;
}

if(n == 0 && fast == NULL)
{
//remove header
head = p->next;
free(p);

return head;
}
else if(n != 0 || fast == NULL)
{
//invalid n
return NULL;
}

while(fast){
tmp = p;
p = p->next;
fast = fast->next;
}

tmp->next = tmp->next->next;
free(p);

return head;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: