题目:
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,养成好习惯。
题目:
标签:tmp,cur,day3,next,链表,https,指针 From: https://www.cnblogs.com/zhangenigma/p/18237954https://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。