递归删除不带头结点的单链表L中所有值为x的结点
时间: 2023-10-18 15:07:41 浏览: 81
对给定的链表 L ,设计一个算法,删除 L 中值为 x 的结点的直接前驱结点。删除结点.cpp
可以考虑使用递归函数来删除单链表中值为x的节点。具体思路是,先递归删除以L->next为首的子链表中值为x的节点,然后再判断L结点的值是否为x,如果是则删除L结点,否则不做处理。
代码如下:
```
void delete_x_node(ListNode* L, int x) {
if(L == NULL) return;
delete_x_node(L->next, x);
if(L->val == x) {
ListNode* temp = L;
L = L->next;
free(temp);
}
}
```
其中,ListNode为单链表的结点定义,val为结点的值,next为指向下一个结点的指针。在函数中,如果L为NULL,即遍历到了单链表的尾部,直接返回。否则,先递归删除以L->next为首的子链表中值为x的结点,然后判断L结点的值是否为x,如果是,则删除L结点并释放其内存,否则不做处理。
需要注意的是,在递归过程中,L结点的值可能会被修改,因此需要使用指针来传递L的地址。另外,对于单链表的删除操作,需要注意处理头结点的情况,这里假设单链表不带头结点。
阅读全文