LintCode452:删除链表中的元素

题目描述

删除链表中等于给定值val的所有节点。

测试样例

给出链表 1->2->3->3->4->5->3, 和 val = 3, 你需要返回删除3之后的链表:1->2->4->5

解题思路

这道题虽然被归为入门题,但是坑很多。上次去深信服面试就问道了这道题。

要注意两点:

1、要删除的元素可能不止一个。

2、要删除的可能是头节点。

明白了这个,就好做了。

代码如下:

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */


class Solution {
public:
    /*
     * @param head: a ListNode
     * @param val: An integer
     * @return: a ListNode
     */
    ListNode * removeElements(ListNode * head, int val) {
        // write your code here
        if (head == NULL) return NULL;
        while (head != NULL && head->val == val) head = head->next;
        ListNode *cur = head;
        while (cur !=NULL && cur->next !=NULL){
           if (cur->next->val == val){
               cur->next = cur->next->next;
           } 
           else 
              cur = cur->next;
        }
        return head;
    }
};

你可能感兴趣的:(算法之道)