题目
Given a linked list, remove the nth node from the end of list and return its head.
For 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.
Try to do this in one pass.
思路
两个指针first 、second 指向链表首部,首先移动first 指针n次,然后同时移动两个指针直到first 到达链表尾部
需要处理n等于链表长度的特殊情况
class ListNode:
def __init__(self, x):
self.val = x
self.next = None
def removeNthFromEnd(head, n):
"""
:type head: ListNode
:type n: int
:rtype: ListNode
"""
if not head.next: return head.next
first = head
second = head
while(first.next is not None):
first = first.next
if n > 0:
n -= 1
print(n,':',first)
#处理n等于链表长度的特殊情况
if n==1 and first.next is None:
print('yes')
return head.next
else:
second = second.next
second.next = second.next.next
return head