19. Remove Nth Node From End of List (Medium)
Given a linked list, remove the n-th node from the end of list and return its head.
Example:
Given linked list: 1->2->3->4->5, and n = 2. After removing the second node from the end, the linked list becomes 1->2->3->5.
Note:
Given n will always be valid.
Follow up:
Could you do this in one pass?
1 万能遍历存list打遍天下:D
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def removeNthFromEnd(self, head, n):
"""
:type head: ListNode
:type n: int
:rtype: ListNode
"""
node = head
A = []
while(node):
A.append(node)
node = node.next
if n == 1:
if len(A) >=2:A[-2].next = None
else:return []
elif n == len(A):
A[0] = A[1]
else:
A[len(A) - n -1 ].next = A[len(A)-n+1]
return A[0]
2 no extra n space
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def removeNthFromEnd(self, head, n):
"""
:type head: ListNode
:type n: int
:rtype: ListNode
"""
node = head
length = 0
while(node):
length += 1
node = node.next
if length == 1 and n==1:return []
if length == n:return head.next
node = head
pre = head
for i in range(length - n - 1):
length -= 1
pre = pre.next
pre.next = pre.next.next
return node
3 添加虚拟节点来避免corner case
class Solution:
def removeNthFromEnd(self, head, n):
"""
:type head: ListNode
:type n: int
:rtype: ListNode
"""
node = head
length = 0
while(node):
length += 1
node = node.next
dummy = ListNode(0)
dummy.next = head
node = dummy
for i in range(length - n):
node = node.next
node.next = node.next.next
return dummy.next