天天看点

LeetCode#19-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.

remove涉及到链表的操作,单向链表只要Pcur.next->new

class Solution(object):

    def removeNthFromEnd(self, head, n):

        """

        :type head: ListNode

        :type n: int

        :rtype: ListNode

        """

        nindex=1

        p=head

        while p.next!=None:

            nindex+=1

            p=p.next

        if n==nindex==1:

            return None

        elif n==nindex:

            return head.next

        pindex=1

        pre=head

        pcur=head.next

        while pcur!=None:

            pindex+=1

            if pindex==nindex-n+1:

                pre.next=pcur.next

                continue

            pre=pcur

            pcur=pcur.next

        return head

在Discuss发现的不错的solution

class Solution(object):

    def removeNthFromEnd(self, head, n):

        fast = slow = head

        for _ in range(n):

            fast = fast.next

        if not fast:

            return head.next

        while fast.next:

            fast = fast.next

            slow = slow.next

        slow.next = slow.next.next

        return head