203. 移除链表元素
方法一
使用增设一个空头结点实现统一化删除结点操作
code:c语言
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* removeElements(struct ListNode* head, int val){
typedef struct ListNode ListNode;
ListNode *shead = (ListNode*)malloc(sizeof(ListNode));//设置空的头结点
shead->next = head;
ListNode *p = shead;
while(p->next != NULL){
if(p->next->val == val){
ListNode *q = p->next;
p->next = q->next;
free(q);
}
else{
p = p->next;
}
}
head = shead->next;
free(shead);
return head;
}
方法二
直接对头结点单独操作
code:c语言
struct ListNode* removeElements(struct ListNode* head, int val){
//不设置空指针
while(head != NULL && head->val == val)
head = head -> next;
if(head == NULL)
return head;
struct ListNode* p = head;
while( p->next != NULL){
if(p->next->val == val){
struct ListNode* q = p->next;
p->next = q->next;
free(q);
}
else
p = p->next;
}
return head;
}
方法三
使用递归方式实现
code:c语言
struct ListNode* removeElements(struct ListNode* head, int val){
//递归
if(head == NULL)//递归结束的条件
return head;
head->next = removeElements(head->next,val);
if(head->val == val)
return head->next;
else
return head;
}