本题来自于leetcode基础题之:移除链表元素
详情请点击移除链表元素
题目
这是不是看到题目的你?
让我们简单分析一下:
根据题目简单分析,我们可以定义两个变量,cur和prev两个变量,让prev变量在cur之后。
接下来代码实现一下:
struct ListNode* removeElements(struct ListNode* head, int val) { struct ListNode*prev=NULL,*cur=head; while(cur) { if(cur->val==val) { //删除 } else { //迭代往后走 prev=cur; cur=cur->next; } } return head; }
看看结果
发现报错呢,为啥呢,我们画图分析一下:
让我们来优化下代码:
//1.头删 //2.中间删除 if(cur==head) { head=cur->next; free(cur); cur=head; } else { //删除 prev->next=cur->next; free(cur); cur=prev->next; }
总代码:
struct ListNode* removeElements(struct ListNode* head, int val) { struct ListNode*prev=NULL,*cur=head; while(cur) { if(cur->val==val) { //1.头删 //2.中间删除 if(cur==head) { head=cur->next; free(cur); cur=head; } else { //删除 prev->next=cur->next; free(cur); cur=prev->next; } } else { //迭代往后走 prev=cur; cur=cur->next; } } return head; }
运行结果:
可以看到代码没有问题,说明成功解决掉了这个问题
今天的分享到这就结束了,有问题可以私信我哦!!