zoukankan      html  css  js  c++  java
  • 19. Remove Nth Node From End of List

    一、问题描述

      给定一个链表的数据结构和链表的头结点,和正整数N,要求删除倒数第N个结点

    二、思路

      删除链表的一个结点,如果你只有当前结点,可以将下一个结点的值赋值到当前结点,然后删除下一个结点就可以。

      如果你能找到需要删除结点的上一个结点,那么你可以直接操作上一个结点的指针指向下下一个结点就可以

      利用两个指针,两个指针中间间隔N个结点的长度,同时往链表末端移动,当后面的指针移动到末端的时候,前面的指针指向需要删除的结点。

      注意:考虑到要删除头结点,可以构造一个虚假的结点

    四、代码

      

    /**
     * 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) {
            
            //排除异常情况
            if(!head || n <= 0)
            {
                return head;
            }
            
            ListNode *fake_head = new ListNode(-1);
            fake_head->next = head;
            
            ListNode *fast = fake_head;
            ListNode *slow = NULL;
            
            for (int i = 1; i <= n && fast->next != NULL; i++) {
                
                fast = fast->next;
                
                if(i == n)
                {
                    //确认链表的长度大于等于N
                    slow = fake_head;
                }
                
            }
            
            while (fast->next) {
                
                fast = fast->next;
                slow = slow->next;
            }
            
            
            if(slow)
            {
                //找到了上一个结点
                slow->next = slow->next->next;
            }
            
            
            return fake_head->next;
            
        }
    };
    

      

  • 相关阅读:
    android4.0 及以上 版本 wifi 和 蓝牙不显示 原因
    AWK命令使用 小结
    Linux xargs命令 小结
    nginx rewrite伪静态配置参数详细说明
    简评file_get_contents与curl 效率及稳定性
    zendstudio 常用快捷键
    PHP字符串三种定义方式
    PHP连贯接口
    yii学习笔记
    PHP中str_replace函数的详解
  • 原文地址:https://www.cnblogs.com/doudouyoutang/p/9460687.html
Copyright © 2011-2022 走看看