题目
实现一个函数,可以删除双链表中倒数第K个节点。
要求
如果链表长度为N,时间复杂度达到O(N),额外空间复杂度达到O(1)。
思路
双链表的思路与前一篇文章单链表的思路基本一致,注意last指针的重连即可
源码
public class Node{
public int value;
public Node next;
public Node last;
public Node(int data){
this.value=data;
}
}
public Node removeLastKthNode(Node head,int lastKth){
if(head==null||lastKth<1){
return head;
}
Node cur=head;
while(cur!=null){
lastKth--;
cur=cur.next;
}
if(lastKth==0){
head=head.next;
head.last=null;
}
if(lastKth<0){
cur=head;
while(++lastKth!=0){
cur=cur.next;
}
Node newNext=cur.next.next;
cur.next=newNext;
if(newNext!=null){
newNext.last=cur;
}
}
return head;
}