题目
给你一个链表,删除链表的倒数第 n
个结点,并且返回链表的头结点。
解法一
思路
跟剑指 Offer 22. 链表中倒数第k个节点[简单] 差不多。只不过这个要记录下pre指针。
代码
public ListNode removeNthFromEnd(ListNode head, int n) {
ListNode dummyHead = new ListNode(0, head);
ListNode pre = dummyHead;
ListNode p = head, q = head;
for (int i = 1; i < n; i++) {
q = q.next;
}
while (q.next != null) {
pre = p;
p = p.next;
q = q.next;
}
pre.next = p.next;
return dummyHead.next;
}
复杂度
- 时间复杂度:O(n)
- 空间复杂度:O(1)