题目描述
给定一个链表,删除链表中倒数第n个节点,返回链表的头节点。
样例
给出链表1->2->3->4->5->null和 n = 2.
删除倒数第二个节点之后,这个链表将变成1->2->3->5->null.
算法思路
既然只允许遍历一次,且N一直有效,那么可以利用双指针解法(前指针、后指针),让前指针先走N步,再让两个在指针同时后移,直到前指针到达尾部,此时,后指针的下一个节点就是要被删除的节点了
代码实现(JAVA,时间复杂度O(N))
public ListNode removeNthFromEnd(ListNode head, int n) {
ListNode preNode = head;
ListNode curNode = head;
for (int i = 0; i < n; i++) {
curNode = curNode.next;
}
if (curNode == null) {
return preNode.next;
}
while (curNode.next != null) {
preNode = preNode.next;
curNode = curNode.next;
}
preNode.next = preNode.next.next;
return head;
}
class ListNode {
int val;
ListNode next;
ListNode(int x) {
val = x;
}
}