203-移除链表元素
leetcode题解——移除链表元素
题目如下
给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。
解题思路
- 不带头结点的解法,分两种情况:
- 首元素的值=val,直接把head往前移
- 非首元素的值=val,删除该元素,连接前后元素
- 带虚拟头结点的解法
- 参考上面非首元素解法
记得释放结点所占内存
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
//不带头结点
struct ListNode* removeElements(struct ListNode* head, int val){
if(head==NULL){
return NULL;
}
while(head && head->val==val){
struct ListNode*p=head;
head=head->next;
free(p);
}
struct ListNode*p=head;
while(p && p->next){
if(p->next->val==val){
struct ListNode*s=p->next;
p->next=s->next;
free(s);
}else{
p=p->next;
}
}
return head;
}
//带虚拟头结点
struct ListNode* removeElements(struct ListNode* head, int val){
if(head==NULL){
return NULL;
}
struct ListNode*my_head=(struct ListNode*)malloc(sizeof(struct ListNode));
my_head->next=head;
struct ListNode*p=my_head;
while(p && p->next){
if(p->next->val==val){
struct ListNode*s=p->next;
p->next=s->next;
free(s);
}else{
p=p->next;
}
}
return my_head->next;
}

浙公网安备 33010602011771号