前言
在初步给大家介绍链表之后,为了让大家更好的理解和巩固链表,小编这里会从易到难以此给大家带来一系列关于链表的oj题。那么接下来就让我们看看今天的例题。
1.题目描述
2. 题目分析前言
在初步给大家介绍链表之后,为了让大家更好的理解和巩固链表,小编这里会从易到难以此给大家带来一系列关于链表的oj题。那么接下来就让我们看看今天的例题。
1.题目描述
2. 题目分析前言
在初步给大家介绍链表之后,为了让大家更好的理解和巩固链表,小编这里会从易到难以此给大家带来一系列关于链表的oj题。那么接下来就让我们看看今天的例题。
1.题目描述
2. 题目分析
法二:
这里我们可以采取创建哨兵位节点,这样就可以避免上面多种情况的讨论,具体如下
这里到达的效果与法一的情况二一致,我们直接进行相应操作即可。
3.相应代码
法一:
struct ListNode* removeElements(struct ListNode* head, int val){ struct ListNode*p=NULL; struct ListNode* cur=head; while(cur) { if(cur->val==val) { struct ListNode*next=cur->next; if(p==NULL) { head=cur->next; } else { p->next=cur->next; } free(cur); cur=next; } else { p=cur; cur=cur->next; } } return head; }
法二:
struct ListNode* removeElements(struct ListNode* head, int val){ struct ListNode* dummyhead=(struct ListNode* )malloc(sizeof(struct ListNode)); dummyhead->next=head; struct ListNode*p=dummyhead; struct ListNode* cur=head; while(cur) { if(cur->val==val) { p->next=cur->next; free(cur); cur=p->next; } else { p=p->next; cur=cur->next; } } return dummyhead->next; }