• 19. Remove Nth Node From End of List(C++,Python)


     1 Given a linked list, remove the nth node from the end of list and return its head.
     2 
     3 For example,
     4 
     5    Given linked list: 1->2->3->4->5, and n = 2.
     6 
     7    After removing the second node from the end, the linked list becomes 1->2->3->5.
     8 Note:
     9 Given n will always be valid.
    10 Try to do this in one pass.
     1 /**
     2  * Definition for singly-linked list.
     3  * struct ListNode {
     4  *     int val;
     5  *     struct ListNode *next;
     6  * };
     7  */
     8 struct ListNode* removeNthFromEnd(struct ListNode* head, int n) {
     9     struct ListNode* cur;
    10     struct ListNode* pre;
    11     cur = head;
    12     pre = head;
    13     if(head == NULL)
    14         return head;
    15     while(n)
    16     {
    17         cur = cur->next;
    18         n--;
    19     }
    20     if(cur == NULL){
    21         head = head->next;
    22         return head;
    23     }
    24     while(cur->next != NULL){
    25         cur = cur->next;
    26         pre = pre->next;
    27     }
    28     pre->next = pre->next->next;
    29     return head;
    30     
    31 }

     python版本:

    # 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
            """
            #这里的头结点是第一个结点
            #判断链表是否为空
            if head == None:
                return head
            
            #设置两个标志位
            cur = head
            pre = head
            
            #cur先走n步
            while n:
                cur = cur.next
                n -= 1    
                
            #如果cur为空,则说明n为链表长度
            if cur == None:
                return head.next
            
            #pre标志位和cur一起走,直到cur走到最后一个结点
            while cur.next != None:
                cur = cur.next
                pre = pre.next
    #删除倒数第n个结点 pre.next
    = pre.next.next return head
  • 相关阅读:
    CodeForces Round #288 Div.2
    POJ 3660 Cow Contest【传递闭包】
    ZOJ 3321 Circle【并查集】
    CF 286(div 2) B Mr. Kitayuta's Colorful Graph【传递闭包】
    CF 287(div 2) B Amr and Pins
    HDU 2122 Ice_cream’s world III【最小生成树】
    HDU 1233 还是畅通工程【最小生成树】
    奶牛接力 矩阵乘法
    家谱 并差集
    昂贵的聘礼 最短路 dijkstra
  • 原文地址:https://www.cnblogs.com/boluo007/p/5528624.html
Copyright © 2020-2023  润新知