第四单元的LeetCode题解

删除链表的结点

2018-04-04  本文已影响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;   
    }
}
上一篇 下一篇

猜你喜欢

热点阅读