zoukankan      html  css  js  c++  java
  • LeetCode OJ

    题目:

    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.

    解题思路:

    先用快慢指针的思想,找到要删除的节点和其前驱(只需遍历一遍)。然后将其删除即可。

    代码:

     1 struct ListNode {
     2     int val;
     3     ListNode *next;
     4     ListNode(int x) : val(x), next(NULL) {}
     5 };
     6 
     7 class Solution {
     8 public:
     9     ListNode *removeNthFromEnd(ListNode *head, int n) {
    10         if (head == NULL) return NULL;
    11 
    12         ListNode *pre = head, *slow = head, *quick = head;
    13         for (int i = 1; i <= n; i++) quick = quick->next;
    14 
    15         while (quick != NULL) {
    16             pre = slow;
    17             slow = slow->next;
    18             quick = quick->next;
    19         }
    20         if (slow != head) {
    21             pre->next = slow->next;
    22             delete slow;
    23             slow = NULL;
    24         }
    25         else {
    26             head = slow->next;
    27             delete slow;
    28         }
    29         return head;
    30     }
    31 };
  • 相关阅读:
    Shared variable in python's multiprocessing
    File checksum
    Windows createprocess linux fork
    人工调用系统调用
    如何提高团队开发效率
    Redis' High Availability
    并发MD5计算方法
    开博宣言
    NYOJ 55 懒省事的小明
    HDU 1237 简单计算器
  • 原文地址:https://www.cnblogs.com/dongguangqing/p/3813430.html
Copyright © 2011-2022 走看看