203. Remove Linked List Elements

给定一个链表和一个整数,要求删除链表上值为给定整数的节点。
Input: 1->2->6->3->4->5->6, val = 6
Output: 1->2->3->4->5

思路:对给定链表循环,如果节点上的值等于给定的val,则跳过,否则将其加入到新链表上。
难点:当最后一个节点要去除时,由于它值等于val,我们可能会不管它,而他之前的节点会指向他,将他带回,所以,解决办法是,当其等于val时,就让新链表的->next= nullptr.

#include<iostream>
using namespace std;
struct ListNode {
    int val;
    ListNode* next;
    ListNode(int x):val(x),next(nullptr){}
};
ListNode* removeElement(ListNode* head, int val) {
    if (!head) return head;
    ListNode* p = new ListNode(-1);
    ListNode* tmp_p = p;
    while (head) {
        if (head->val != val) {
            tmp_p->next = head;
            tmp_p = tmp_p->next;
        }
        else {
            tmp_p->next = nullptr;
        }
        head = head->next;
    }
    return p->next;
}

int main() {
    ListNode a = ListNode(1);
    ListNode b = ListNode(2);
    ListNode c = ListNode(6);
    ListNode d = ListNode(3);
    ListNode e = ListNode(4);
    ListNode f = ListNode(5);
    ListNode g = ListNode(6);
    a.next = &b;
    b.next = &c;
    c.next = &d;
    d.next = &e;
    e.next = &f;
    f.next = &g;
    ListNode* p = removeElement(&a, 6);
    while (p) {
        cout << p->val<<endl;
        p = p->next;
    }
    return 0;
}

 

posted @ 2020-05-11 14:51  星海寻梦233  阅读(79)  评论(0编辑  收藏  举报