zoukankan      html  css  js  c++  java
  • leetcode19

    class Solution {
    public:
        int N = 0;
        int LEN = 0;
    
        ListNode* removeNthFromEnd(ListNode* head, int n) {
            int i = 0;
            ListNode* node = head;
            N++;
            LEN = max(LEN, N);
            if (node->next != NULL)
            {            
                ListNode* Next = removeNthFromEnd(node->next, n);
                N--;
                if (n == LEN - N)
                {
                    node->next = Next->next;
                }
            }
            if (n == LEN)
            {
                return head->next;
            }
            return node;
        }
    };

     补充一个python的实现:

     1 class Solution:
     2     N = 0
     3     LEN = 0
     4     def removeNthFromEnd(self, head: 'ListNode', n: 'int') -> 'ListNode':
     5         self.N += 1
     6         self.LEN = max(self.N,self.LEN)
     7         
     8         CN = self.N - 1
     9         node = head
    10         if node.next != None:
    11             nextnode = self.removeNthFromEnd(node.next,n)
    12         index = self.LEN - n - 1
    13         if CN == index:
    14             node.next = nextnode.next
    15         if n == self.LEN:
    16             return head.next
    17         return node

    另一种快慢指针的实现不需要递归:

     1 public ListNode removeNthFromEnd(ListNode head, int n) {
     2     ListNode dummy = new ListNode(0);
     3     dummy.next = head;
     4     ListNode first = dummy;
     5     ListNode second = dummy;
     6     // Advances first pointer so that the gap between first and second is n nodes apart
     7     for (int i = 1; i <= n + 1; i++) {
     8         first = first.next;
     9     }
    10     // Move first to the end, maintaining the gap
    11     while (first != null) {
    12         first = first.next;
    13         second = second.next;
    14     }
    15     second.next = second.next.next;
    16     return dummy.next;
    17 }

    python版本:

     1 class Solution:
     2     def removeNthFromEnd(self, head: ListNode, n: int) -> ListNode:
     3         dm = ListNode(0)
     4         dm.next = head
     5         slow,fast = dm,dm
     6         for i in range(n):
     7             fast = fast.next
     8         while fast != None and fast.next != None:
     9             slow = slow.next
    10             fast = fast.next
    11         if slow.next != None:
    12             slow.next = slow.next.next
    13             return dm.next
    14         return None
  • 相关阅读:
    zhcon安装过程记录
    diff和patch配合使用(转载备用)
    Linux /etc/passwd 和 /etc/group 文件格式
    APT 常用功能
    Linux邮件服务器架构
    出现segment fault 错误的几种原因
    位运算
    Linux启动过程中几个重要配置文件的执行过程
    2016-2017 ACM-ICPC, South Pacific Regional Contest (SPPC 16)
    Codeforces Round #439 (Div. 2) 题解
  • 原文地址:https://www.cnblogs.com/asenyang/p/9746810.html
Copyright © 2011-2022 走看看