Right Now I'm trying my first medium leetcode problem for the first time (Remove Nth Node From End of List) and I'm pretty confident that the code I have should work with it. But for some reason when I it runs, my while-loop for A.Next
gives the error:
NoneType' object has no attribute 'next'
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def removeNthFromEnd(self, head: Optional[ListNode], n: int) -> Optional[ListNode]:
a = head
b = head
c = head
i = 0
while i < n - 1:
c = c.next
i = 1
while c.next != None:
b = b.next
c = c.next
while a.next != b:
a = a.next
a.next = b.next
b = None
return head
It doesn't make sense as to why its not running because I defined my a
variable to equal the head which should then also have access to a.next
because again, its connected to the head. The while c.next != None:
loop works fine without any issues so I don't understand whats causing the issue for my a
variable.
CodePudding user response:
head
is Optional
, which means that it could be None
when it is passed to the function. You should check if head
is None
first before assigning a
, b
, and c
.
CodePudding user response:
Here is what's going on. Your while loop checks a.next != b, which will never be true, hence a becomes equal to None eventually and the check a.next when a is None is failing with error mentioned above. This has nothing to do with linked list logic, it's simply how python compare things.
Your while loop
while a.next != b: a = a.next
should be changed to
while a.next is not b: a = a.next
know the difference between != and is not
, it's extremely important if you want to continue coding in python.