- 题目
给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。
- 思路
们注意到这个问题可以容易地简化成另一个问题:删除从列表开头数起的第 (L - n + 1)(L−n+1) 个结点,其中 LL 是列表的长度。只要我们找到列表的长度 LL,这个问题就很容易解决。
- 代码
public ListNode removeNthFromEnd(ListNode head, int n) {
ListNode dummy = new ListNode(0);
dummy.next = head;
int length = 0;
ListNode first = head;
while (first != null) {
length++;
first = first.next;
}
length -= n;
first = dummy;
while (length > 0) {
length--;
first = first.next;
}
first.next = first.next.next;
return dummy.next;
}
复杂度分析
时间复杂度:O(L)该算法对列表进行了两次遍历。
空间复杂度:O(1)只用了常量级的额外空间