zoukankan      html  css  js  c++  java
  • 19. 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个元素,况且只能遍历链表一遍。

    所以,需要定义两个指针,相差是N个元素,同时向前遍历,当靠前的元素走到最后的时候,在后面的元素刚好与最后一个元素距离为N,删除即可。

    于是:

    #Definition for singly-linked list.
    class ListNode(object):
        def __init__(self, x):
            self.val = x
            self.next = None
    
    
    class Solution(object):
        
        def removeNthFromEnd(self, head, n):
            """
            :type head: ListNode
            :type n: int
            :rtype: ListNode
            """
            p = head
            q = head
            if head.next ==None:return []
            for i in range(0,n):
                q = q.next
            if not q : return head.next
            while q.next:
                p = p.next
                q = q.next
            temp = p.next.next
            p.next = temp
            return head
            
    if __name__=='__main__':
        arr = [1,2]
        p = ListNode(arr[0])
        head = p
        for i in arr[1:]:
            p.next = ListNode(i)
            p = p.next
        s=Solution()
        q=s.removeNthFromEnd(head,2)
        while q:
            print (q.val)
            q = q.next
  • 相关阅读:
    java中的设计模式
    stack
    最大堆排序
    Starship Troopers
    Tick and Tick
    Last non-zero Digit in N!
    G
    C
    B
    A
  • 原文地址:https://www.cnblogs.com/yuanzhaoyi/p/6072112.html
Copyright © 2011-2022 走看看