LeetCode 203. Remove Linked List Elements
2016-03-10 01:06
423 查看
Remove all elements from a linked list of integers that have value val.
Example
Given: 1 --> 2 --> 6 --> 3 --> 4 --> 5 --> 6, val = 6
Return: 1 --> 2 --> 3 --> 4 --> 5
一、算法分析
本来很简单的一道题,但是LeetCode上的链表题目默认是不带头指针的,结果花了我不少时间修改了几个版本;主要问题有:(1)head==null的时候要有判断;(2)head->val==val (或者是开头的几个都是val) 的时候,这时开头的几个都要删除,简单的return head->next; 是不行的;(3)因为没有头结点,所以pre不好赋值;
综合上面这三点,我最后想到的解决方案就是循环判断head->val==val,若成立就一直head=head->next; 注意这里要把head!=null 判断放到前面,否则 当head==null时,直接运行head->val会出错的。
ps:必须抱怨一句,为什么链表不带头结点那 = =
二、C语言实现
Example
Given: 1 --> 2 --> 6 --> 3 --> 4 --> 5 --> 6, val = 6
Return: 1 --> 2 --> 3 --> 4 --> 5
一、算法分析
本来很简单的一道题,但是LeetCode上的链表题目默认是不带头指针的,结果花了我不少时间修改了几个版本;主要问题有:(1)head==null的时候要有判断;(2)head->val==val (或者是开头的几个都是val) 的时候,这时开头的几个都要删除,简单的return head->next; 是不行的;(3)因为没有头结点,所以pre不好赋值;
综合上面这三点,我最后想到的解决方案就是循环判断head->val==val,若成立就一直head=head->next; 注意这里要把head!=null 判断放到前面,否则 当head==null时,直接运行head->val会出错的。
ps:必须抱怨一句,为什么链表不带头结点那 = =
二、C语言实现
/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */ struct ListNode* removeElements(struct ListNode* head, int val) { struct ListNode *p,*pre,*temp; while(head!=NULL && head->val == val){ head=head->next; } if(head==NULL){ return head; } pre=head; p=head->next; while(p){ if(p->val==val){ pre->next=p->next; p=pre->next; }else{ pre=p; p=p->next; } } return head; }
相关文章推荐
- 如何组织构建多文件 C 语言程序(二)
- 如何写好 C main 函数
- 书评:《算法之美( Algorithms to Live By )》
- 动易2006序列号破解算法公布
- Ruby实现的矩阵连乘算法
- C#插入法排序算法实例分析
- Lua和C语言的交互详解
- 超大数据量存储常用数据库分表分库算法总结
- C#数据结构与算法揭秘二
- C#冒泡法排序算法实例分析
- C#定义并实现单链表实例解析
- C#数据结构之单链表(LinkList)实例详解
- 算法练习之从String.indexOf的模拟实现开始
- C#算法之关于大牛生小牛的问题
- C#实现的算24点游戏算法实例分析
- 关于C语言中参数的传值问题
- 简要对比C语言中三个用于退出进程的函数
- 深入C++中API的问题详解
- 基于C语言string函数的详解
- C语言中fchdir()函数和rewinddir()函数的使用详解