码迷,mamicode.com
首页 > 其他好文 > 详细

链表问题----删除倒数第K个节点

时间:2018-07-15 00:15:41      阅读:152      评论:0      收藏:0      [点我收藏+]

标签:倒数第k个节点   ret   list   col   就是   空间   链表   函数   public   

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

  

  分别实现两个函数,一个可以删除单链表中的倒数第K个节点,一个可以删除双链表中的倒数第k 个节点,要求时间复杂度是 O(N),空间复杂度是 O(1)。

  

  【解析】

  基本思路:

  让链表从头开始走到尾,每移动一步,就让k值减一,当k 值走到结尾时,

  如果k 值大于0,说明链表根本没有倒数第k 个节点

  如果等于0,那么头节点就是倒数第k 个节点,此时应该返回 head.next

  如果小于0,则重新从头节点开始,每移动一步,k 值增加一,当k 等于0时,移动停止,移动到的节点就是要删除节点的上一个节点

  

package com.test;

import com.test.ListNode;
import com.test.ListNodeDouble;

/**
 * Created by Demrystv.
 */
public class DelLastKNode {


    //删除单链表中的倒数第K 个节点
    public ListNode removeLastKthNodeInSingle(ListNode head, int lastKth){
        if (head == null || lastKth < 1){
            return null;
        }

        ListNode cur = head;
        while (cur != null){
            lastKth--;
            cur = cur.next;
        }
        if (lastKth == 0){
            head = head.next;
        }

        // 可以举例子:1 2 3 4 5 的倒数第4个节点
        if (lastKth < 0){
            cur = head;
            while (++lastKth != 0){
                cur = cur.next;
            }
            cur.next = cur.next.next;
        }
        return head;
    }


    // 删除双链表的倒数第K 个节点,原理与上面删除倒数第K个 节点的原理类似,主要是注意指针的连接
    public ListNodeDouble removeLastKthNodeInDouble(ListNodeDouble head, int lastKth){
        if (head == null || lastKth < 1){
            return null;
        }

        ListNodeDouble 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;
            }
            ListNodeDouble newNext = cur.next.next;
            cur.next = newNext;
            if (newNext != null){
                newNext.last = cur;
            }
        }
        return head;
    }
}

 

链表问题----删除倒数第K个节点

标签:倒数第k个节点   ret   list   col   就是   空间   链表   函数   public   

原文地址:https://www.cnblogs.com/Demrystv/p/9311288.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!