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

【题目】

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

【代码】

单链表删除
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public ListNode removeNthFromEnd(ListNode head, int n) {
        ListNode cur = head;
        while(cur != null){
            cur = cur.next;
            n --;
        }
        if(n > 0){
            return head;
        }else if(n == 0){
            return head.next;
        }else{
            cur = head;
            while(++n != 0){
                cur = cur.next;
            }
            cur.next = cur.next.next;
        }
        return head;
    }
}

【代码】

public class DoubleNode {
    public DoubleNode last;
    public DoubleNode next;
    public int value;

    public DoubleNode(int value) {
        this.value = value;
    }
}

private DoubleNode removeLastKthNode(DoubleNode node, int k) {
    if (node == null || k < 1) {
        return node;
    }
    DoubleNode cur = node;
    while (cur != null) {
        cur = cur.next;
        k--;
    }
    if (k > 0) {
        return node;
    } else if (k == 0) {
        node = node.next;
        node.last = null;
    } else {
        cur = node;
        while (++k != 0) {
            cur = cur.next;
        }
        DoubleNode nextNode = cur.next.next;
        cur.next = nextNode;
        if (nextNode != null) {
            nextNode.last = cur;
        }

    }
    return node;
}
©️2020 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值