题目链接:https://leetcode-cn.com/problems/remove-linked-list-elements/
给你一个链表的头节点 head
和一个整数 val
,请你删除链表中所有满足 Node.val == val
的节点,并返回 新的头节点 。
这道题就是链表的增删查改中的删变形。
考虑三种情况就可以了
还有种特殊的情况:空链表。
思路:就是搞三个指针遍历一遍,就行了。
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* removeElements(struct ListNode* head, int val){
struct ListNode *prve=NULL;
struct ListNode *cur=head;
while(cur){
if(cur->val!=val){
prve=cur;
cur=cur->next;
}
else{
struct ListNode *next =cur->next;
//第一个或者都是val时
if(prve==NULL){
free(cur);
head=next;
cur=next;
}
else{
//通常情况
free(cur);
prve->next=next;
cur=next;
}
}
}
return head;
}
其实还是更简单的方法
就是递归,虽然通过,但是数据过多时,还是会栈溢出。