我正在研究Remove Linked List Elements - LeetCode
上一个简单的LinkedList基本操作问题
- 删除链接列表元素
从具有值 val 的整数链接列表中删除所有元素。
示例:
Input: 1->2->6->3->4->5->6, val = 6 Output: 1->2->3->4->5
我的解决方案:
这3个节点:prev_node(prev),current_node(cur),next_node(nxt)
将
prev.next
从current_node更改为next_node上一个
cur =上一个
nxt = prev.next.next
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def removeElements(self, head: ListNode, val: int) -> ListNode:
#relation: prev.next = nxt to replace cur
prev = head
if prev == None: return head
if prev.next == None: #cur == None:
if prev.next.val == 6:
prev.next = None
return head
while prev.next != None: #cur !=None
if prev.next.val == 6: #if cur.val == 6
nxt = prev.next.next
prev.next = nxt
prev = prev.next #advance to traverse
return head
但是,它报告了Time Limit Exceeded
错误。
我认为问题不是性能,而是我发现的实施错误。
出什么问题了?
答案 0 :(得分:1)
不幸的是,您的实现中存在多个错误,关键是如果prev.next.val != val
,您的解决方案并没有前进。
一个提示:使用虚拟可以简化过程。
class Solution:
def removeElements(self, head: ListNode, val: int) -> ListNode:
#relation: prev.next = nxt to replace cur
dummy = prev = ListNode(0)
prev.next = head
while prev != None and prev.next != None: #cur !=None
if prev.next.val == val: #if cur.val == val
nxt = prev.next.next
prev.next = nxt
else:
prev = prev.next #advance to traverse
return dummy.next