题目地址:https://leetcode.com/problems/delete-node-in-a-linked-list/open in new window

Total Accepted: 78258 Total Submissions: 179086 Difficulty: Easy

题目描述

Write a function to delete a node (except the tail) in a singly linked list, given only access to that node.

Given linked list -- head = [4,5,1,9], which looks like following:

4 -> 5 -> 1 -> 9

Example 1:

Input: head = [4,5,1,9], node = 5
Output: [4,1,9]
Explanation: You are given the second node with value 5, the linked list
             should become 4 -> 1 -> 9 after calling your function.

Example 2:

Input: head = [4,5,1,9], node = 1
Output: [4,5,9]
Explanation: You are given the third node with value 1, the linked list
             should become 4 -> 5 -> 9 after calling your function.

Note:

1、 Thelinkedlistwillhaveatleasttwoelements.;
2、 Allofthenodes'valueswillbeunique.;
3、 Thegivennodewillnotbethetailanditwillalwaysbeavalidnodeofthelinkedlist.;
4、 Donotreturnanythingfromyourfunction.;

题目大意

给出了一个节点,这个节点是在一个单链表中的,并且这个节点不是最后一个节点。现在要我们删除这个节点。

解题方法

设置当前节点的值为下一个

拿到这个题时以为要从头找到这个节点前一个节点,然后删除当前节点。这个应该是正常思路。

但是,题目只给出了删除的这个节点,没有给出根节点。所以可以通过这个将当前的节点的数值改成下面的节点的值,然后删除下一个节点的方式。

链表基本操作,记待删除节点为node:

令node.val = node.next.val,node.next = node.next.next即可

Java代码如下:

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

1 2 3 4 5 6 7 8 9 10 11 12 13 14

python代码如下:

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

class Solution(object):
    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

1 2 3 4 5 6 7 8 9 10 11 12 13 14

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;
    }
};

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

DDKK.COM 弟弟快看-教程,程序员编程资料站,版权归原作者所有

本文经作者:负雪明烛 授权发布,任何组织或个人未经作者授权不得转发