删除链表的结点

作者: 第四单元 | 来源:发表于2018-04-04 10:46 被阅读1次

    题目

    编写一个函数,在给定单链表一个结点(非尾结点)的情况下,删除该结点。

    假设该链表为1 -> 2 -> 3 -> 4 并且给定你链表中第三个值为3的节点,在调用你的函数后,该链表应变为1 -> 2 -> 4。

    思路

    一般来说,我们删除一个结点需要知道该结点的前一个结点p,使p->next = p->next->next,即使其前一个结点指向其后一个结点,跳过自己即可把自己在链表中删除。
    但这个题目只知道要被删除的结点本身,由于是单链表无法获得其前一个结点。
    可以采用这种方式:将该结点后一个结点的内容复制到本结点,将本结点指向下一个节点的下一个节点。即将本结点变成下一个节点,将下一个节点在链表中删除。

    代码

    /**
     * Definition for singly-linked list.
     * public class ListNode {
     *     int val;
     *     ListNode next;
     *     ListNode(int x) { val = x; }
     * }
     */
    class Solution {
        public void deleteNode(ListNode node) {
            ListNode next = node.next;
            node.val = next.val;
            node.next = next.next;   
        }
    }
    

    相关文章

      网友评论

        本文标题:删除链表的结点

        本文链接:https://www.haomeiwen.com/subject/fxckhftx.html