首页 > 其他分享 >day9

day9

时间:2022-11-03 22:12:48浏览次数:25  
标签:slow ListNode day9 shead fast next int

[0019.删除链表的倒数第N个节点]

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* removeNthFromEnd(ListNode* head, int n) {
        ListNode *shead = new ListNode ();
        shead->next = head;
        ListNode *pre = shead;
        ListNode *cur = shead;
        int count=0;
        while (cur->next !=nullptr){
            cur = cur->next;
            count++;
        }
        if (count == 1){
            shead->next = nullptr;
        }
        else{
            cur = shead;
            for (int i = 0; i <= (count - n ); i++){
                pre = cur;
                cur = cur->next;
            }
            pre->next = cur->next;
            delete cur;
        }
        return shead->next; 
    }
};
  • 运行成功。其实还是调试了一下,因为没考虑到数组中只有一个元素的情况,所以加了个if else判断。思路就是先把链表从头到尾遍历一遍用count记录节点总个数,然后就是把倒数第n个转化为正数第几个下标算出来,再来一次遍历进行删除操作。我感觉卡哥应该有更简单的思路 去看看
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* removeNthFromEnd(ListNode* head, int n) {
        ListNode *shead = new ListNode ();
        shead->next = head;
        ListNode *slow = shead;
        ListNode *fast = shead;
        for (int i = 0; i < n; i++){
            fast = fast->next;
        }
        //fast = shead;
        while(fast->next != nullptr){
            slow = slow->next;
            fast = fast->next;
        }
        ListNode *temp = slow->next; 
        slow->next = slow->next->next;
        delete temp;
        return shead->next;
    }
};
  • 看了卡哥思路 写了代码 开始调试不通过 上面那句注释掉就可以了 因为fast不是跟slow一起从头开始的 不然费那么大功夫在开头只移动fast不移动slow是干嘛 就是为了和slow拉开相应差距啊~ 我那一句直接让fast一下回到解放前了>-<

  • 今天这两段代码每段用了将近40min 还是慢 不过比前两天进步多了 慢慢来 不着急

  • 卡哥代码里有些语句我还要再学学 自己是写不出来的

    while(n-- && fast != NULL) {
         fast = fast->next; 
     }
    

    注意:先判(n且fast 不是空)这个条件为真----进入while---n再--; 疑问:while中的n是减之前的数还是减了之后的数? 我认为是减了之后的数 因为n--是先判断后运算 那么相必进入while之前 也就是在判断之后已经运算过了 到时候输出一下就行了 <<<<<cout了 以上想法完全正确!!
    明天继续:)

标签:slow,ListNode,day9,shead,fast,next,int
From: https://www.cnblogs.com/deservee/p/16856021.html

相关文章

  • day9.0
    继承的基本作用,提高代码的复用性。继承的主要作用,有了继承,才有方法的重写和多态。继承的缺点:继承会导致耦合度较高。方法重写(Override)两个类必须存在继承关系。重......
  • 【leetcode_C++_栈与队列_day9】20. 有效的括号&1047. 删除字符串中的所有相邻重复项&
    20.有效的括号给定一个只包括'(',')','{','}','[',']'的字符串s,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭......
  • 【leetcode_C++_栈与队列_day9】232.用栈实现队列&&225. 用队列实现栈
    知识补充:栈与队列理论基础(C++)C++中stack是容器么?​ stack:堆栈栈是以底层容器完成其所有的工作,对外提供统一的接口,底层容器是可插拔的(也就是说我们可以控制使用哪种......
  • 代码随想录Day9 KMP算法
    LeetCode 剑指offer 58 左旋转字符串字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符......
  • Day9 词汇5个
    cater/ˈkeɪtə/​v.提供餐饮服务,承办酒席;满足,迎合​toprovideandservefoodanddrinksataparty,meetingetc,usuallyasabusinesscaterfor  Thisist......
  • day9文件读写以及操作使用的诸多方法
    今日内容概要拔高作业讲解文件操作利用python代码的编写来读写文件1.文件的概念2.文件的操作方式3.文件读写模式4.文件操作模式5.文件诸多方法6.文件......
  • 进入python的世界_day9_python基础——文件操作
    一、文件操作1.什么是文件?​ 文件其实是操作系统暴露给用户操作硬盘的快捷方式(接口)2.代码如何操作文件​ 关键字open('')​三步走:​ 1.利用关键字open打......
  • day9- 流程控制完结
    1publicstaticvoidmain(String[]args){2//打印三角形3for(inti=1;i<=5;i++){4for(intj=5;j>=i;j--){5......
  • 代码随想录day9 | 28.找出字符串中第一个匹配项的下标
    28.找出字符串中第一个匹配项的下标题目|文章1.暴力求解思路对原串的每一个前缀进行搜索,判断是否和模式串相匹配。实现点击查看代码classSolution{public:......
  • C++学习 Day9-01 指针-定义及使用
    指针变量定义语法:数据类型*变量名;示例:intmain(){ //1、指针的定义 inta=10;//定义整型变量a //指针定义语法:数据类型*变量名; int*p; //指针变量......