-
笔记
题目要求删除倒数第N个节点,定义一个临时变量来从头遍历,每走1步,N--
,最后判读N的值,(1)N > 0: 则不用调整链表,直接将头节点返回 (2)N == 0: 表示头节点就是倒数第N个节点,即链表长度等于N (3)N < 0: 重新从头节点开始走,每移动1步,n++。 当n为0的时候移动停止,此时的cur指向的是第倒数N+1个节点
注意:将释放的节点内存回收
2. 代码
/**
* 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(head == NULL || n <= 0){
return head;
}
ListNode* cur = head;
while(cur!=NULL){
n--;
cur = cur->next;
}
if(n == 0) head = head->next;
if(n < 0){
cur = head;
while(++n != 0){
cur = cur->next;
}
ListNode* tmp = cur->next;
cur->next = tmp->next;
delete tmp;
}
return head;
}
};