Удалить узел из отдельного LinkedList простым способом

Я изучаю LinkedList, решая простую задачу с литкодом Удалить узел в связанном списке — LeetCode

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:

Удалить узел из отдельного LinkedList простым способом

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:

  • The linked list will have at least two elements.
  • All of the nodes' values will be unique.
  • The given node will not be the tail and it will always be a valid node of the linked list.
  • Do not return anything from your function.

И официальное решение:

Замените значение узла, которое вы хотите удалить, значением в узле после него, а затем удалите узел после него.

# 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 

Я подумал, что это громоздко, поэтому изменил его на:

class Solution:
    def deleteNode(self, node):
        node= node.next

Назначьте следующий узел текущему узлу простым способом

К сожалению, он сообщает о неправильном ответе.

Я не могу понять, почему он не работает.

Логика свободна от ошибок: текущий узел был затенен его следующим узлом,

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
0
173
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вот что мы хотим сделать, удалить node:

pre -> node -> post => pre -> post

Итак, что вам нужно сделать, это изменить pre.next с node на node.next. подобно:

pre.next = node.next

Если вы сделаете node = node.next, изменится только ссылка node.

Это никак не влияет на исходный ListNode.

Но мы не можем получить pre в этом сценарии, поэтому нам нужно изменить значение node на post и удалить post.

Надеюсь, что это поможет вам, и прокомментируйте, если у вас есть дополнительные вопросы. :)

Я понял. node - это объект. не может сделать что-то вроде [1, 2, 3] = [3, 4, 5], потому что обе стороны являются объектами, а не переменными.

Alice 09.04.2019 13:26

Другие вопросы по теме