链表 / 删除链表中的节点

2019-08-08  本文已影响0人  原创迷恋者

请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点,你将只被给定要求被删除的节点。

示例 1:
输入: head = [4,5,1,9], node = 5
输出: [4,1,9]
解释: 给定你链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9.

示例 2:
输入: head = [4,5,1,9], node = 1
输出: [4,5,9]
解释: 给定你链表中值为 1 的第三个节点,那么在调用了你的函数之后,该链表应变为 4 -> 5 -> 9.

说明:
1.链表至少包含两个节点。
2.链表中所有节点的值都是唯一的。
3.给定的节点为非末尾节点并且一定是链表中的一个有效节点。
4.不要从你的函数中返回任何结果。

难点:
该题最难的地方在于,函数的输入只是需要被删除的节点的值,但是若要进行链表的删除操作,需要将给定节点的前一个阶段的next值赋值为该节点的下一个节点。如果采用这种方式,则将无法完成任务。

因此,必然不可能采用传统方式,需要改变思维方式。最后的检查方式只是看完成操作的链表中是否已经没有给定要删除的那个数字。既然我们无法得到要删除节点的前一个节点,却能向后遍历,我们可以这样操作。

  1. 将要删除节点赋值为该节点的后一个节点的值
  2. 删除掉后一个节点,即将本节点的next指针指向后一个节点的后一个节点。

即可完成操作。

代码如下:

class deleteNode {
    public void deleteNode(ListNode node) {
        // 赋值
        ListNode next = node.next;
        node.val = next.val;
        // 删除
        node.next = next.next;
    }  
}
上一篇下一篇

猜你喜欢

热点阅读