您的位置:首页 > 其它

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

2017-10-30 19:36 337 查看
【题目】

分别实现两个函数,一个可以删除单链表中倒数第K个节点,另一个可以删除双链表中倒数第K个节点。

【要求】

如果链表长度为N,时间复杂度达到(O(N)),额外控件复杂度达到O(1);

单链表

package com.angel.num2;
class Node{
int value;
Node next;
public Node(int value){
this.value = value;
}
}
public class DelNode {
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;
if (lastKth < 0){
cur = head;
while(++lastKth != 0)
cur = cur.next;
cur.next = cur.next.next;
}
return head;
}
}


双链表

package com.angel.num2;
class DoubleNode{
int value;
DoubleNode last;
DoubleNode next;
public DoubleNode(int value){
this.value = value;
}
}
public class DoubleDel {
public DoubleNode removeLastKthNode(DoubleNode head, int lastKth){
if (head == null || lastKth < 1)
return head;
DoubleNode cur = head;
while (cur != null){
lastKth--;
cur = cur.next;
}
if (lastKth == 0){
head = head.next;
head.last=null;
}
if (lastKth < 0){
while (++lastKth != 0)
cur = cur.next;
DoubleNode newNext = cur.next.next;
cur.next = newNext;
if (newNext != null)
newNext.last = cur;
}
return head;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  链表
相关文章推荐