您的位置:首页 > 编程语言 > C语言/C++

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语言实现

/**
* 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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息