leetcode Remove Linked List Elements

题目链接

remove-linked-list-elements

题目描述(Description)

Remove Linked List Elements

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

移除链表元素

给定一个整数,要求从链表中移除包含这个整数的所有结点。

例如:

给定链表和值:1 --> 2 --> 6 --> 3 --> 4 --> 5 --> 6, val = 6

返回:1 --> 2 --> 3 --> 4 --> 5

分析(Analysis)

这题并不难。起初我考虑到头结点是否需要删去的问题,把问题分为了两部分解决。后来,看了网上的思路,有更好的办法可以把所有问题归为一类,那就是在头结点之前假定一个空闲结点newhead,然后把newhead->next指向head即可。最后返回newhead->next

代码(Code)

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode* removeElements(ListNode* head, int val) {
        ListNode* newhead=new ListNode(-1);
        ListNode* pre=newhead;
        ListNode* cur=head;
        newhead->next=head;
        while(cur){
            if(cur->val==val){
                cur=cur->next;
                pre->next=cur;
            }
            else{
                pre=cur;
                cur=cur->next;
            }
        }
        return newhead->next;
    }
};