【剑指offer】删除链表中的节点

给出一个头节点和待删除的节点,在O(1)的时间内删除该节点。(删除节点为X,前一个节点为i,后一个节点为j)
并没有想到思路,按平时的思路遍历到i节点,然后使i节点的next指向j节点。这样的思路也是O(n)的。

// 新思路:把节点j的内容复制到x,x指向j的下一个节点。但是有个问题,当x是尾指针的情况。
// 疑问:c/c++代码deleteNode函数中形参是指向指针的指针ListNode** node,java中怎么办呐?

package cn.wsw.offer;

import java.util.Scanner;

class ListNode {
    int val;
    ListNode next = null;

    ListNode(int val) {
        this.val = val;
    }
}

public class Solution {

    // 此方法中返回值是ListNode而不是void的原因是:当节点只有一个,而且被删除,此时head节点应指向null。
    public static ListNode deleteNode(ListNode head, ListNode toDelete) {
        if (head == null || toDelete == null) {
            return null;
        }

        if (toDelete.next != null) { // 删除的节点不是尾节点
            toDelete.val = toDelete.next.val;
            toDelete.next = toDelete.next.next;
        } else if (head == toDelete) { //只有一个节点,要删除的节点既是头结点也是尾节点
            head = null;
        } else { // 有多个节点,删除尾节点
            ListNode t = head;
            while (t.next != toDelete) {
                t = t.next;
            }
            t.next = null;
        }
        return head;
    }

    public static void main(String[] args) {
        // 构造链表
        int[] array = {1,2,3,4,5};
        // int[] array = {1};
        ListNode head = new ListNode(array[0]), t = head;
        for (int i = 1; i < array.length; i++) {
            t.next = new ListNode(array[i]);
            t = t.next;
        }

        // 删除第k个节点 使toDelete指向要删除的节点
        int k = new Scanner(System.in).nextInt();
        ListNode toDelete = head;
        while (k > 1) {
            toDelete = toDelete.next;
            k--;
        }
        head = deleteNode(head, toDelete);

        // 遍历删除节点后的链表
        while (head != null) {
            System.out.println(head.val);
            head = head.next;
        }

    }
}
全部评论

相关推荐

强大的马里奥:不太可能,我校计算机硕士就业率99%
点赞 评论 收藏
分享
点赞 评论 收藏
分享
当初高考报计算机真是造大孽了啊!卷的飞起!哪都是计算机的人,考研,考公,找工作全他奶的计算机的人,太难了。国企也是。关键一届比一届卷,造大孽了!
_Lyrics_:因为计算机,没有体验到快乐的大学研究生时光,好不容易修完课程就要出去实习,看着别人专业可以一起搓麻将,游山玩水,而我却要自己一个人住在北上不到十平米的出租屋,每天两点一线
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务