1 移除链表元素(看看)
思路我很简单 但是 小细节我需要完善 第一 我们的head指的是链表的第一个元素 我用了head.size()这不纯有病
第二点就是我知道要设置一个虚指针指向head 但是我用的是listnode * first = null肯定不可以的我们需要listnode * first = new listnode(0)这样才可以的在声明 ListNode * firstlist1 = nullptr;
之后,直接使用 firstlist1->next = head;
是错误的,因为 firstlist1
是一个空指针,解引用一个空指针会导致未定义行为。你需要先为 firstlist1
分配内存。
2 设计链表
问题1 为什么我们要重新设计一个我自己的链表呢?
可以不用但是这样子写容易理解
问题2 为什么我需要有这两个呢?
因为如何没有我们在MyLinkedList()进行创建并且初始化的话是错误的 因为毕竟他是一个函数
创建之后也是一个局部的 在外面不可以使用的!
问题3
运用多个 if的时候一定要小心 注意搭配if else if 使用 因为如果第三个不是else if 是if的时候 容易出错 因为addAtTail会对size++!!!!!!!!
3 反转链表
其实很简单就是我要注意 做的时候记得画图 看流程!! (再做一遍)
还有就是我们初始化的的时候必须是first = null 不能new 具体你好好看看就懂了
4 两两交换链表中的节点
会做 (注意画图捋一下思路就可以啦)
5 删除链表的倒数第N个元素
这个题目 也会做但是有一个很重要的细节就是我必须
这样子写 因为如果三个都是new listnode 的话我们相当于创建了三条链表,然后其他都不会有问题。就是删除元素是第一个元素会出问题
6 链表相交
会 但是第一种方法 尝试一下 就是这个
7 环形链表II
这个题目我一开始想的是map<int,int>来做就是我的next一但出现跟map中的值相同我就直接返回
这是错误的 他因为这个值有可能出现多次
那我换方法 就是用地址 因为地址是唯一的 不管怎么都不会变 所以用地址就可以了