ST移除链表元素
1、链表:链表是一种通过指针串联在一起的线性结构,每一个节点由两部分组成,一个是数据域,一个是指针域(存放下一个节点的指针),最后一个节点的指针域指向null(空指针)。
2、链表的入口节点成为链表的头结点,head。
3、链表的类型分为:单链表、双链表、循环链表。
- 单链表的指针域只能指向节点的下一个节点。
- 双链表既可以向前查询也可以向后查询。
- 循环列表就是链表首尾相连,可以用来解决约瑟夫环问题。
4、单链表:每个节点只有一个 指针域,仅指向下一个节点,头节点是遍历入口,尾结点的next指向Null,单通道,只能从起点走到终点,没法回头。
特点是结构简单、占用内存少,但只能单向遍历,如果想找某个节点的上一个节点,只能从头重新遍历。
5、双链表:每个节点有两个指针域,next指向下一个节点,prev指向上一个节点,头节点prev指向Null,尾节点next指向Null。像一条双向车道,既能从起点到终点,也能从终点返回起点。
特点是支持双向遍历、查询,找前驱节点无需从头遍历,效率会更高;但每个节点多一个指针域,会占用更多内存。
6、循环链表:对于单链表来说,单链表的尾节点next不指向Null,而是指向头节点,形成闭环;双链表的尾节点next指向头节点,头节点prev指向尾节点。
特点是无首尾之分,遍历到最后一个节点时,会回到起点,适合需要循环处理的场景,比如环形队列。
7、移出链表中,节点等于target的所有节点,返回链表的头节点。
方法一:针对头节点和非头节点,移出链表中节点的方法是不一样的。由于正常在删除节点的时候,要找这个节点的前一个节点,指向前一个节点的下一个节点;而如果是头节点,就需要直接把头节点往下移一个,指向下一个节点作为我们新的头节点。所以要判断是不是头节点很重要。
方法二:虚拟头节点法,在链表节点最前面虚拟一个头节点,这样在删除链表中所有元素时候,都可以按照统一的规则进行了,如果删除的是头节点,可以让虚拟节点指向下一个节点。
8、方法一代码实现:
if(head != Null&&head->val==target)
//头节点一定不为空,因为要取头节点的值;同时头节点
head
9、方法二代码实现:

浙公网安备 33010602011771号