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

来源:互联网 发布:优化布林线 编辑:程序博客网 时间:2024/06/05 14:53

【题目】
分别实现两个函数,一个可以删除单链表中倒数第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;    }}
阅读全文
0 0
原创粉丝点击