今天更新关于单链表的leetcode
单链表的缺陷其实是很多的,单纯单链表增删查改的意义不大
1.很多OJ题目考查的都是单链表,因为缺陷多。
2.单链表更多的是去做更复杂数据结构的子结构,包括哈希表,邻接表。
链表存储数据还要看双向链表
给你一个链表的头节点 head
和一个整数 val
,请你删除链表中所有满足 Node.val == val
的节点,并返回 新的头节点
选择C模式 :
思路:
1.删除:
定义*cur=head,就是从头开始走,准备用cur->val遍历数组,从1开始,不是val,++,到2,不是val,++,到6,是val,需要free掉这个元素6,这时就是需要2的next链接到3,3的地址通过此时的cur->next可以获得,而2的next需要重新定义一个变量prev来跟随cur走,先定义*prev=head, 通过prev->next=cur->next链接2和3,
2.迭代:
2和3链接起来后,需要继续向后找,此时prev指向2,cur指向3,所以要prev=cur,然后cur=cur->next继续向后
到这里其实测试的话,程序报错,用例输入[7,7,7,7],输出7,也就是没有考虑到头删的情况
3.头删:
当第一个数据就遇到了val时,也就是cur==head,需要把head删掉,思想同删除一样,可以看下面代码
完整代码如下:
链表的题会更新一段时间。