leetCode题解之删除单链表中指定的元素

1、问题描述

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

给定一个单链表和一个数值,删除单链表中数据域等于该数值的节点。

 

2、问题分析

遍历一次链表,找到数据域等于给定数值的链表节点,然后删除之。删除链表的操作,就是被删除链表节点的前驱节点直接指向其后继节点,在C++ 中还要记得 delete被删除的链表。

为了方便处理head节点,可以人为创建一个新节点,新节点的next指向head。

特例是,输入为空时,直接返回NULL。

 

3、代码

 1 ListNode* removeElements(ListNode* head, int val) {
 2         
 3         if(head == NULL)
 4             return NULL;
 5         
 6         ListNode FirstNode(0);
 7         FirstNode.next = head;
 8         
 9         ListNode* p = &FirstNode;
10         while(p != NULL)
11         {
12             ListNode* tmp = p->next;
13             if(tmp !=  NULL && tmp->val == val )
14             {
15                 p->next = tmp->next;
16                 delete tmp; 
17             }
18             else
19                 p= p->next;
20         }
21         
22         return FirstNode.next;
23         
24         
25     }

 

posted @ 2018-03-29 12:53  山里的小勇子  阅读(3560)  评论(0编辑  收藏  举报