2022.02.17删除链表的倒数第N个节点
(题目来源:https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list/ )
题目描述
给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。
思路 栈
由于要删除倒数的元素,所以考虑用栈,回溯时进行计数。定义递归函数如下:
int pre(ListNode cur) {
if(cur == null) return 0;
else {
int i = pre(cur.next);
if(i == n) cur.next = cur.next.next;
return i+1;
}
}
但是,考虑到样例2无法通过,可以在最前面添加一个节点,让删除头节点的操作也统一。完整代码如下:
int n;
int pre(ListNode cur) {
if(cur == null) return 0;
else {
int i = pre(cur.next);
if(i == n) cur.next = cur.next.next;
return i+1;
}
}
public ListNode removeNthFromEnd(ListNode head, int num) {
n = num;
ListNode newHead = new ListNode(-1, head);
pre(newHead);
return newHead.next;
}