题目:给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点
ListNode* removeElements(ListNode* head, int val)
{
ListNode*tmp=new ListNode(0);
tmp=_dummyHead;
_dummyHead=head;
while(tmp->next)
{
if(tmp->next->val==val)//判断tmp的下个节点的值是否等于val
{
tmp->next=tmp->next->next;//是就修改tmp指向的下个节点
}
else//tmp的下个节点的值不等于val,就移动tmp
{
tmp=tmp->next;
}
}
return head;
}
测试代码:
/*************************************************************************
> File Name: 15-移除链表元素.cpp
> Author:
> Mail:
> Created Time: Thu 31 Mar 2022 08:15:33 PM CST
************************************************************************/
#include<iostream>
using namespace std;
class Solution
{
public:
struct ListNode
{
int val;
struct ListNode*next;
ListNode(int val):val(val),next(nullptr){}
};
//1. 在链表最前面插入一个节点,插入完成后,新插入的节点为链表的新的头结点
ListNode*addAtHead(int val)
{
ListNode* newNode = new ListNode(val);
newNode->next = _dummyHead->next;
_dummyHead->next = newNode;
return _dummyHead->next;
}
//尾插法
ListNode*addeare(int val)
{
ListNode* newNode = new ListNode(val);
ListNode* pre=_dummyHead;
while(pre->next!=nullptr)
{
pre=pre->next;
}
//退出循环说明pre的下个位置为空,即链表队尾
pre->next=newNode;
return _dummyHead->next;//返回头
}
// 2.打印链表
void printLinkedList()
{
ListNode* cur = _dummyHead;
while (cur->next != nullptr)
{
cout << cur->next->val << " ";
cur = cur->next;
}
cout << endl;
}
ListNode* removeElements(ListNode* head, int val)
{
ListNode*tmp=new ListNode(0);
tmp=_dummyHead;
_dummyHead=head;
while(tmp->next)
{
if(tmp->next->val==val)//判断tmp的下个节点的值是否等于val
{
tmp->next=tmp->next->next;//是就修改tmp指向的下个节点
}
else//tmp的下个节点的值不等于val,就移动tmp
{
tmp=tmp->next;
}
}
return head;
}
ListNode* _dummyHead= new ListNode(-1);
};
int main()
{
// //输入:1 4 3 2 5 2 x=3;
// //输出:1 2 3 4 3 5
Solution s,s1;
s.addeare(4);
s.addeare(2);
s.addeare(1);
s.addeare(2);
s.addeare(3);
Solution::ListNode*l1=s.addeare(2);;
s.printLinkedList();//打印移动前数据
Solution:: ListNode*head=s.removeElements(l1,2);//链表向右移动
//s.printLinkedList();//打印移动前数据
//打印移动后链表
Solution::ListNode*q=head;
while(q)
{
cout<<q->val<<" ";
q=q->next;
}
cout<<endl;
return 0;
}