题解 | #删除链表的倒数第n个节点#
删除链表的倒数第n个节点
https://www.nowcoder.com/practice/f95dcdafbde44b22a6d741baf71653f6
无脑解法:避免链表只有一个节点,在链表末尾增加一个节点,然后反转,删除第n个节点,再反转
/**
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
class Solution {
public:
/**
*
* @param head ListNode类
* @param n int整型
* @return ListNode类
*/
ListNode* reverseLink(ListNode* head) {
if (head == NULL)
return NULL;
ListNode* cur = head;
ListNode* pre = NULL;
while (cur != NULL) {
ListNode* temp = cur->next;
cur->next = pre;
pre = cur;
cur = temp;
}
return pre;
}
ListNode* removeNthFromEnd(ListNode* head, int n) {
ListNode* iter = head;
while (iter->next != NULL) {
iter = iter->next;
}
ListNode* v1 = new ListNode(-1);
iter->next = v1;
ListNode* rev = reverseLink(head);
ListNode* pre = rev;
ListNode* cur = rev->next;
for (int i = 0; i < n - 1; i++) {
pre = pre->next;
cur = cur->next;
}
pre->next = cur->next;
return reverseLink(rev->next);
}
};