Use 2 pointers to iterate the linked list. The second pointer is n steps behind the first pointer.
Time Complexity : O ( N )
Space Complexity : O ( 1 )
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution(object):
def removeNthFromEnd(self, head, n):
"""
:type head: ListNode
:type n: int
:rtype: ListNode
"""
# use dummy head node to handle the case that needs to remove the first node.
dummy = ListNode(0)
dummy.next = head
p1, p2 = dummy, dummy
while p2 and n >= 0:
p2 = p2.next
n -= 1
while p2 and p1:
p2 = p2.next
p1 = p1.next
if p1 and p1.next:
p1.next = p1.next.next
return dummy.next
No comments:
Post a Comment