且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

【算法学习】237. 删除链表中的节点(java / c / c++ / python / go / rust)

更新时间:2022-02-08 04:18:39

237. 删除链表中的节点:

请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点。传入函数的唯一参数为 要被删除的节点 。

现有一个链表 -- head = [4,5,1,9],它可以表示为:

【算法学习】237. 删除链表中的节点(java / c / c++ / python / go / rust)

样例 1

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

提示


分析

  • 链表前一个节点存有下一个节点的地址,一般的删除节点,是直接将当前节点的上一个节点与当前节点的下一个节点相连。
  • 本题只传入要删除的节点,所以当前节点的地址是不能变的,也就只能改变值了。在业务的角度看,并不关心链表的地址,关心的是里面的值,所以我们只要让值看起来是删掉了,就算是删除了当前节点。
  • 这道题官方不让选rust,二当家的只好舍掉。

题解

java

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

c

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
void deleteNode(struct ListNode* node) {
    node->val = node->next->val;
    node->next = node->next->next;
}

c++

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

python

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution:
    def deleteNode(self, node):
        """
        :type node: ListNode
        :rtype: void Do not return anything, modify node in-place instead.
        """
        node.val = node.next.val
        node.next = node.next.next

go

/**
 * Definition for singly-linked list.
 * type ListNode struct {
 *     Val int
 *     Next *ListNode
 * }
 */
func deleteNode(node *ListNode) {
    node.Val = node.Next.Val;
    node.Next = node.Next.Next;
}

【算法学习】237. 删除链表中的节点(java / c / c++ / python / go / rust)


https://leetcode-cn.com/problems/delete-node-in-a-linked-list/


非常感谢你阅读本文~
放弃不难,但坚持一定很酷~
希望我们大家都能每天进步一点点~
本文由 二当家的白帽子:https://developer.aliyun.com/profile/sqd6avc7qgj7y 博客原创~