19.删除链表的倒数第 N 个结点
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class Solution {  
public:
ListNode* removeNthFromEnd(ListNode* head, int n) {
ListNode* getLen = head;

ListNode* virtualHead = new ListNode(-1);
virtualHead->next = head;
ListNode* delNode = virtualHead;

int len = 0;
while(getLen){ // 获取链表长度
getLen = getLen->next;
len++;
}
len = len - n;
for(int i = 0; i < len; i++){ // 找到需要移除节点的前一个节点
delNode = delNode->next;
}

delNode->next = delNode->next->next; // 删除节点

return virtualHead->next; // 返回头节点
}
};

只要明白链表的特性,以及删除的特点就很容易想到该怎么处理这道题,不会想复杂。我们要删除链表的倒数第 N 个节点,只需要找到这个节点的前一个节点,因为删除链表节点的准则就是找到待删除节点的前一个节点。由于我们是要找倒数第 N 个节点,就要先获取链表长度(只能遍历一次得到),然后len = len - n计算出 len ,用于找到待删除节点的前一个节点。