首页 > 其他分享 >day3链表

day3链表

时间:2024-06-07 22:22:08浏览次数:17  
标签:tmp cur day3 next 链表 https 指针

题目:

https://leetcode.cn/problems/remove-linked-list-elements/submissions/537974263/
题目解析:
https://programmercarl.com/0203.移除链表元素.html

这道题用了dummyHead,会简单非常多,但是需要注意的是,如果不用dummyHead的话,去除head为啥使用while而不是if呢?
个人理解是,可能会出现很多个连续的符合val值的节点,这样的话只用if就只删除了一个,而用while的话可以尽数删除。

此外cur是一个指针,它指向某个节点,从而可以改变这个节点的指向,并且绝大多数题目都是cur驱动的,使用

while(cur!= null)或
while(cur)

这里的区别是如果使用cur!=则最终的指针是指向最后一个节点,而使用cur的话最终是指向null;

题目:

https://leetcode.cn/problems/design-linked-list/
题目解析:
https://programmercarl.com/0707.设计链表.html#思路
这里是一个类,包括构造函数,private和public;
值得注意的是

void deleteAtIndex(int index) {
        if (index >= _size || index < 0) {
            return;
        }
        LinkedNode* cur = _dummyHead;
        while(index--) {
            cur = cur ->next;
        }
        LinkedNode* tmp = cur->next;
        cur->next = cur->next->next;
        delete tmp;
        //delete命令指示释放了tmp指针原本所指的那部分内存,
        //被delete后的指针tmp的值(地址)并非就是NULL,而是随机值。也就是被delete后,
        //如果不再加上一句tmp=nullptr,tmp会成为乱指的野指针
        //如果之后的程序不小心使用了tmp,会指向难以预想的内存空间
        tmp=nullptr;
        _size--;
    }

这段的tmp = nullptr我个认为是不需要的,作用域结束后会把tmp销毁掉,但是显示指出可能才是大佬的风格把,以后也可以注意把此类指针显示设置为nullptr,养成好习惯。

题目:

https://leetcode.cn/problems/reverse-linked-list/submissions/537978356/
题目解析:
https://programmercarl.com/0206.翻转链表.html#算法公开课
这道题就是可以指向null的推进方式,与其说它是双指针,不如认为是三指针,它推动的方式是使用cur,但是其实是通过tmp来确定移动的方向,
而采用pre = cur可以保证pre指针一直在cur前一个。因此是cur是动力源,而pre和tmp都作为锚定点来标明前一个和后一个节点。
因为cur最终是在null,因此返回值得是pre。

标签:tmp,cur,day3,next,链表,https,指针
From: https://www.cnblogs.com/zhangenigma/p/18237954

相关文章

  • 代码随想录第3天 | 链表 203.移除链表元素,707.设计链表,206.反转链表
    题目:203.移除链表元素思路:主要是头节点的删除问题,一种是直接在原链表上后移头节点设置虚拟头结点,指向原链表的头结点,在设置一个cur指针指向当前节点,虚拟头节点初始化后就不移动了,使用cur进行移动不要忘记释放删除节点的内存,自行设置的虚拟头节点也要释放时间复杂度:O(n)空......
  • 代码随想录训练营第三天 | 203.移除链表元素 707.设计链表 206.反转链表
    python定义链表val:数据域,节点存储的元素。next:指针域,指向下一个节点的指针,最后一个节点指向None表示空指针。点击查看代码classListNode:def__init__(self,val,next=None):self.val=valself.next=next203.移除链表元素题目:给你一个链表的......
  • 二叉链表---二叉树的简单实现
    实验内容将二叉链表视为森林的孩子兄弟链表,计算森林中叶子个数。代码实现#define_CRT_SECURE_NO_WARNINGS1#include<stdio.h>#include<stdlib.h>#include<string.h>#defineElemTypeinttypedefstructBtree{ ElemTypeelem; structBtree*lchild,*rchild......
  • Linux学习Day3-Linux档案于目录管理
    一、目录与路径1、相对路径与绝对路径绝对路径:路径的写法【一定由根目录/写起】相对路径:路径的写法【不是由/写起】·相对路径的用途    写程序目录时相较简单·绝对路径的用途    写程序管理系统的条件下,确保正确性2、目录的相关操作.       ......
  • 141. 环形链表
    /***Definitionforsingly-linkedlist.*typeListNodestruct{*Valint*Next*ListNode*}*/funchasCycle(head*ListNode)bool{listMap:=map[*ListNode]struct{}{}forhead!=nil{if_,ok:=listMap[head];ok{......
  • 21. 合并两个有序链表
    packagemainimport"fmt"typeListNodestruct{ Valint Next*ListNode}//创建链表funccreateList(nums[]int)*ListNode{ head:=&ListNode{} tail:=head fori:=0;i<len(nums);i++{ node:=&ListNode{Val:nums[i]} t......
  • 206. 反转链表
    packagemainimport"fmt"typeListNodestruct{ Valint Next*ListNode}funcreverseList(head*ListNode)*ListNode{ varpre*ListNode//前驱节点指针 cur:=head//当前节点指针 forcur!=nil{ next:=cur.Next//临时存储next指针 cur.N......
  • leetcode19删除链表的倒数第 N 个结点
    本文主要讲解删除链表倒数第n个节点的要点与细节c++与java代码如下,末尾本题之前可以尝试leetcode203移除链表元素具体要点:1.首先,单看移除链表节点,核心操作是:cur->next=cur->next->next 即,当前节点cur的下一个节点指向原本的下下个节点小细节:操作时,我们需要得到要......
  • leetcode160相交链表
    本文主要讲解相交链表的要点与细节c++及java代码如下,末尾1.两个链表相交的条件是,两个节点的指针相同,而不是元素值相同,即if(a==b)returna; 2.·既然要找到相交的点,那么相交之后,两个链表就完全一样了(后续长度和数值),那么我们就要不断同步更新headA和headB的临时指针,直到......
  • 【C++进阶】深入STL之list:高效双向链表的使用技巧
    ......