给定一个链表和一个整数,要求删除链表上值为给定整数的节点。
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; }