给你一个链表的头节点 head
和一个整数 val
,请你删除链表中所有满足 Node.val == val
的节点,并返回新的头节点。输入head={1,2,6,3,4,5,6},val=6; 相同数都删除。
同样定义listNode结构体存放指针域。
通过递归使结点互相连接起来,直到头节点为空,返回判断头节点值是否等于val被删除值,如果等于返回next,不等于返回本值。21-11
#include <stdio.h>
#include <malloc.h>
struct ListNode {
int val;
struct ListNode *next;
};
struct ListNode* removeElements(struct ListNode* head, int val) {
if (head == NULL) {
return head;
}
head->next = removeElements(head->next, val);
return head->val == val ? head->next : head;
}
int main() {
struct ListNode* node1= malloc(sizeof (struct ListNode));
struct ListNode* node2= malloc(sizeof (struct ListNode));
struct ListNode* node3= malloc(sizeof (struct ListNode));
struct ListNode* node4= malloc(sizeof (struct ListNode));
struct ListNode* node5= malloc(sizeof (struct ListNode));
struct ListNode* node6= malloc(sizeof (struct ListNode));
struct ListNode* node7= malloc(sizeof (struct ListNode));
node1->val=1;
node2->val=2;
node3->val=6;
node4->val=3;
node5->val=4;
node6->val=5;
node7->val=6;
node1->next=node2;
node2->next=node3;
node3->next=node4;
node4->next=node5;
node5->next=node6;
node6->next=node7;
node7->next=NULL;
struct ListNode* newhead= removeElements(node1,6);
while (newhead){
printf("%d ",newhead->val);
newhead=newhead->next;
}
return 0;
}