[链表]-在单链表和双链表中删除倒数第K个节点

来源:互联网 发布:python 金融数据分析 编辑:程序博客网 时间:2024/06/05 20:32

【题目】

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

【要求】

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

【解答】

单链表:

public class Node{public int value;public Node next;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;}if(lastKth < 0){cur = head;while(++lastKth != 0){cur = cur.next;}cur.next = cur.next.next;}return head;}
对于双链表的调整,几乎与单链表的处理方式一样,注意last指针的重连即可。

public class DoubleNode{public int value;public DoubleNode last;public DoubleNode next;public DoubleNode(int data){this.value = data;}}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){cur = head;while(++lastKth != 0){cur = cur.next;}DoubleNode newNext = cur.next.next;cur.next = newNext;if(newNext != null){newNext.last = cur;}}return head;}



阅读全文
0 0
原创粉丝点击