【leetcode】Remove Nth Node From End of List

题目简述:

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.

解题思路:

标准的双指针,第一个指针先走n步,注意删除时候的处理

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution:
    # @return a ListNode
    def removeNthFromEnd(self, head, n):
        posa = ListNode(0) 
        posa = head
        posb = ListNode(0)
        posb = head 
        pre = ListNode(0)
        pre.next = head
        while n > 0:
            posa = posa.next
            n -= 1
        while posa != None:
            #print 'a',posa.val
            #print 'b',posb.val
            posa = posa.next
            posb = posb.next
            pre = pre.next
        #print posb.val
        if pre.next == head:
            head = head.next
        else:
            pre.next = pre.next.next

        return head
posted @ 2015-03-29 19:49  mrbean  阅读(199)  评论(0编辑  收藏  举报