删除链表的结点

作者: 第四单元 | 来源:发表于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