19. Remove Nth Node From End of List
题目
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.
解析
- 两种思路
- 思路一:第一遍遍历得到链表的长度,第二遍走cnt-n步,注意边界条件
- 思路二:两个指针,第一个先走n-1步,然后两个指针一起走
// 19. Remove Nth Node From End of Listclass Solution {public: ListNode* removeNthFromEnd(ListNode* head, int n) { ListNode* cur = head; if (head==NULL) { return NULL; } int cnt = 0; while (cur!=NULL) { cnt++; cur = cur->next; } cur = head; int pos = cnt - n+1; if (pos==1) { return cur->next; } pos = pos - 2; while (pos) { cur = cur->next; pos--; } ListNode* dete = cur->next; if (dete->next) { cur->next = cur->next->next; } else { cur->next = NULL; } //delete dete; return head; }};
题目来源