0%

203.移除链表元素

203. 移除链表元素

直接使用原来的链表来进行移除节点操作:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
ListNode* removeElements(ListNode* head,int val){
//删除头结点
while(head!=NULL&&head->val==val){
ListNode* tmp=head;
head=head->next;//直接让head等于下一个next
delete tmp;
}
//删除非头结点
ListNode* cur =head; //设置一个cur的东西来操作链表
while(cur!=NULL&&cur->next!=NULL){ //当前不为空,且下一个结点也不为空
if(cur->next->val==val){ // 如果当前的下一个结点为val 当前的next地址为下一个结点
ListNode* tep=cur->next;
cur->next=cur->next->next; //val的next变成 val的下一个下一个的next
}else{
cur=cur->next;
}
}
return head;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
ListNode* removeElements(ListNode* head, int val) {
//删除头结点
while(head!=NULL&&head->val==val){
ListNode* tmp=head;
head=head->next;
delete tmp;
}
//删除非头结点
ListNode *cur=head;
while(cur!=NULL&&cur->next!=NULL){ //当前不为空,且下一个也不为空
if(cur->next->val==val){
ListNode *tmp=cur->next;
cur->next=cur->next->next;
delete tmp;
}
else{
cur=cur->next;
}
}
return head;
}
};

设置一个虚拟头结点在进行移除节点操作:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
ListNode* removeElements(ListNode* head,int val){
ListNode* dummyHead=new ListNode(0); //创建一个虚拟节点
dummyHead->next=head; //这个结点的地址指向head
ListNode* cur=dummyHead;//用来操作的作为 当前的为虚拟结点
while(cur->next!=NULL){
if(cur->next->val==val){// 当前的下一个结点值 等于 val
ListNode* tmp=cur->next;//
cur->next=cur->next->next; //下一个等于下一个结点
delete tmp;
}
else{
cur=cur->next; //cur移向下一个结点
}
head=dummyHead->next; //head为虚拟结点的下一个结点
delete dummyHead;//
return head;
}

}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#include <iostream>
using namespace std;
//单链表
struct ListNode{
int val; //节点上存储的元素
ListNode *next; //指向下一个结点的指针
ListNode(int x): val(x) ,next(NULL){}
};
//创建链表
//ListNode* createList(){
// ListNode* head=NULL;
// ListNode* tail=NULL;
// int val;
// while(cin>>val){
// ListNode* node=new ListNode(val);
// if(tail==NULL){
// head=node;
// tail==node;
// }
// else{
// tail->next=node;
// tail=node;
// }
// }
//}
ListNode* removeElements(ListNode* head,int val){

ListNode *dymmy=new ListNode(0);
dymmy->next=head;
ListNode *cur=dymmy;
while(cur->next!=NULL){
if(cur->next->val==val){
ListNode *tmp=cur->next;
cur->next=cur->next->next;
delete tmp;
}
else{
cur=cur->next;
}

}
// head=dymmy->next
return head=dymmy->next;
}
//打印链表
void printList(ListNode* head){
while(head)//head is not empty
{
cout<<head->val<<" ";//pirnt the value of the head
head=head->next; //turn to the next address
}
cout<<endl;
}
int main(){
ListNode* head = new ListNode(1);
head->next = new ListNode(2);
head->next->next = new ListNode(6);
head->next->next->next = new ListNode(3);
head->next->next->next->next = new ListNode(4);
head->next->next->next->next->next = new ListNode(5);
head->next->next->next->next->next->next = new ListNode(6);

int val = 6;

ListNode* newHead= removeElements(head,val);
printList(newHead);
return 0;
}

-------------本文结束感谢您的阅读-------------
老板你好,讨口饭吃