链表问题2——在双链表中删除倒数第K个节点

题目

实现一个函数,可以删除双链表中倒数第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;
}
发布了43 篇原创文章 · 获赞 21 · 访问量 4922

猜你喜欢

转载自blog.csdn.net/flying_1314/article/details/103834814