简体   繁体   中英

Why is the time limit exceeding in reversing the linked list?

# Definition for singly-linked list.

 class ListNode:

     def __init__(self, val=0, next=None):
         self.val = val
         self.next = next

class Solution:
    def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]:
        prev=ListNode(-1,head)
        curr=head
        dummy=head
        while dummy.next:
            curr.next=prev
            prev=dummy
            dummy=dummy.next
            curr=dummy
        return prev

I created three nodes, I used the prev and curr node for reversing and the dummy node for traversing ahead in the original linked list but I am getting time limit exceeded. I would like to know my logical error in this method

Some issues:

  • In the loop you modify the node's next attribute before saving the original next reference. So once that is done, you have lost all possibility to move forward in list, and dummy=dummy.next will now walk back since at the start of the iteration, dummy was equal to curr .

  • It is undesired to create a new node with value. Your code would link back to it in the first iteration of the loop. And because of the first problem, dummy becomes prev , which has a next reference to where you came from, creating an infinite loop. Instead of this -1 Node, just initialise prev as None .

  • The while condition is wrong. The loop should continue until you reach the very last node, so when curr is None .

  • Not a major issue, but why call that node reference dummy ? There is nothing dummy about it. Use a name that describes what it references, for instance nextNode or nxt for short.

Correction:

class Solution:
    def reverseList(self, head):
        prev=None  # Don't create a new node
        curr=head
        while curr:  # Continue until the *last* node
            nxt=curr.next  # Save the next reference
            curr.next=prev
            prev=curr
            curr=nxt  # ... so you can move ahead
        return prev

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM