[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,
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;
}
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;
}
相关文章推荐
- leetcode -- Remove Nth Node From End of List
- [Leetcode] Remove Nth Node From End of List
- LeetCode 19: Remove Nth Node From End of List
- LeetCode: Remove Nth Node From End of List
- LeetCode - Remove Nth Node From End of List
- [LeetCode] Remove Nth Node From End of List
- [LeetCode] Remove Nth Node From End of List 解题报告
- leetcode 40: Remove Nth Node From End of List
- [LeetCode] Remove Nth Node From End of List
- [LeetCode] Remove Nth Node From End of List
- LeetCode 笔记系列四 Remove Nth Node From End of List
- LeetCode-Remove Nth Node From End of List
- leetcode 40: Remove Nth Node From End of List
- [LeetCode]Remove Nth Node From End of List
- [leetcode]Remove Nth Node From End of List
- LeetCode: Remove Nth Node From End of List
- [leetcode刷题系列]Remove Nth Node From End of List
- leetcode--Remove Nth Node From End of List
- LeetCode-Remove Nth Node From End of List
- LeetCode: Remove Nth Node From End of List