- 链表理论基础
- 203.移除链表元素
- 707.设计链表
- 206.反转链表
详细布置
链表理论基础
建议:了解一下链接基础,以及链表和数组的区别
文章链接:代码随想录
203.移除链表元素
建议: 本题最关键是要理解 虚拟头结点的使用技巧,这个对链表题目很重要。
题目链接/文章讲解/视频讲解::代码随想录
主要分为两种方法:
1.常规方法,即分两类情况讨论,判断要删除的节点是否为头结点,如果为头结点则直接将我们设定的Head -> Head next;如果不为头结点,则跳过该节点将指针指向下一个结点即可。代码中具体行表现
cur->next = cur->next->next;
2.虚拟头结点方法,在原本的头结点前面增加一个虚拟头结点dummyhead,可以很好地避免常规方法中需要分类讨论的问题
此外,使用C++语言一定要记得删掉的元素需要释放内存。
ListNode* tmp = cur->next;
delete tmp;
同时需要注意最后return返回的应该是dummyhead的next而非head头结点(head头结点可能被删)
707.设计链表
建议: 这是一道考察 链表综合操作的题目,不算容易,可以练一练 使用虚拟头结点
题目链接/文章讲解/视频讲解:代码随想录
本体介绍了基础题目中关于链表的全部基本操作,包括获取第N个节点的值,在头部或尾部插入节点,在第N个节点前插入节点或删除第N个节点。
要注意的几个地方在于:
1.获取第0个节点即为获取头节点。
2.在头部插入节点时要注意多出来的new node要先连接上原来的dummyhead的next节点,然后再用dummyhead节点指向new node。顺序反了之后会使dummyhead next节点已经改为了new node, 原本的dummyhead next节点定位丢失无法找到。
3.在删除第n个节点时同样要注意,要定位到n-1节点为cur才能删除cur next