19. Remove Nth Node From End of List
Given a linked list, remove the n-th node from the end of list and return its head.
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.
Follow up:
Could you do this in one pass?
题目链接:https://leetcode.com/problems/remove-nth-node-from-end-of-list/
思路
把题目不考虑的特殊情况也考虑在内,有以下几个要点:
点1:声明2个指针用于寻找倒数。
点2:n的合法性判断-小等于0、大于链表长度。
点3:删除的是头尾元素的操作。
/**
* 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) {
if(n<=0 || head == NULL) return head;
ListNode* node = new ListNode(0);
node->next = head;
ListNode* l = node,*r = node;
for(int i=0;i<n;++i){
if(r->next!=NULL) {
r = r->next;
}else{
return head;
}
}
while(r->next!=NULL){
r = r->next;
l = l->next;
}
auto tmp = l->next;
l->next = tmp->next;
delete tmp;
return node->next;
}
};