LeetCode - Remove Nth Node From End of List
The Problem is described as following:
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.
My Solution is as following:
# # Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
# @param {ListNode} head
# @param {integer} n
# @return {ListNode}
def removeNthFromEnd(self, head, n):
newhead = ListNode(0)
newhead.next = head
left, right, i = newhead, newhead, 0
while i < n and right.next is not None:
right = right.next
i += 1
while right.next is not None:
right = right.next
left = left.next
if left.next is not None:
temp = left.next
left.next = temp.next
return newhead.next
这里着重提两点:其一是在处理之前添加一个额外的头指针,以应对需要删除所给的ListNode的head的情况;其二就是快慢指针的使用,实现单次遍历完成删除的过程。