TLE错误,从LinkedList中删除元素

时间:2019-04-22 23:34:28

标签: python linked-list

我正在研究Remove Linked List Elements - LeetCode

上一个简单的LinkedList基本操作问题
  
      
  1. 删除链接列表元素
  2.   
     

从具有值 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错误。

我认为问题不是性能,而是我发现的实施错误。

出什么问题了?

1 个答案:

答案 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