[入门]删除链表中的元素

题目来源:http://www.lintcode.com/zh-cn/problem/remove-linked-list-elements/

1、用当前节点判断下一节点的val,所以循环结束标识是while (temp->next != NULL),而不能是while(temp!=NULL)
2、定义一个dummy,作为head的上一节点,不然写起来非常麻烦。
3、注意题目的模板,在模板基础上增加,不然会出错

 1 /*
 2  * Definition for singly-linked list.
 3  * struct ListNode {
 4  *     int val;
 5  *     ListNode *next;
 6  *     ListNode(int x) : val(x), next(NULL) {}
 7  * };
 8  */
 9 class Solution
10  {
11 public:
12 /*
13  * @param head a ListNode
14  * @param val an integer
15  * @return a ListNode
16  */
17     ListNode *removeElements(ListNode *head, int val) 
18     //函数removeElements
19     //输入:head,一个ListNode类型的指针,是链表头指针;val,int类型
20     //返回:ListNode类型的指针,是删除元素后的链表头地址
21     {
22         ListNode dummy;//定义一个ListNode类的对象dummy
23         dummy.next = head;//dummy的下个节点是head,这个是精华,不定义dummy写起来很麻烦
24         ListNode *temp = &dummy;//创建临时指针temp,首先指向dummy,用当前节点判断下一节点的val
25         while (temp->next != NULL) //没到最后一个节点(不包括最后一个节点)
26         //不能写成temp!=NULL,这样到最后一个节点的时候temp->next->val会出错
27         {
28             if (temp->next->val == val) //从第一个节点head开始判断
29                 temp->next = temp->next->next;//把变量等于val的节点删除
30             else 
31                 temp = temp->next;//否则只是移动temp到下一个节点
32         }     
33         return dummy.next;//返回删除元素后的链表头地址
34     }
35 };
posted @ 2016-04-19 14:48  Pearl_zju  阅读(302)  评论(0编辑  收藏  举报