zoukankan      html  css  js  c++  java
  • LeetCode 删除链表倒数第N个节点

    基本思路

    1. 定义两个指示指针a b
    2. 让a先行移动n+1个位置
    3. 若a指向了NULL的位置,则删除的是头节点(由于走过了n+1个节点刚好指在尾部的NULL上)
    4. 否则让b与a一起移动直至a->next,即a的下一个节点为NULL,则此时b的下一个节点为要删除的节点
    5. 删除下一个节点

    代码实现

    /**
     * Definition for singly-linked list.
     * struct ListNode {
     *     int val;
     *     ListNode *next;
     *     ListNode(int x) : val(x), next(NULL) {}
     * };
     */
    class Solution {
    public:
        ListNode* removeNthFromEnd(ListNode* head, int n) {
            ListNode* a = head;
            ListNode *b =head;
            int c = 1;
            //令a指向第n+1个节点
            while(c!=n+1){
                a = a->next;
                c++;
            }
            if(a == NULL){
                ListNode * t = head;
                head = head->next;
                delete t;
                return head;
            }
            
            //a b 同时向前走
            while(a->next != NULL){
                a = a->next;
                b = b->next;
            }
            
            ListNode * t = b->next;
            b->next = b->next->next;
            delete t;
            return head;
        }
    };
    
  • 相关阅读:
    java-ApiDemo
    java编译器特性
    java
    java
    java
    java
    java
    java
    hdoj 3549 Flow Problem(最大网络流)
    hdoj 1269 迷宫城堡(强连通分量)
  • 原文地址:https://www.cnblogs.com/Phoenix-blog/p/10577204.html
Copyright © 2011-2022 走看看