题解 | #从单向链表中删除指定值的节点#
从单向链表中删除指定值的节点
https://www.nowcoder.com/practice/f96cd47e812842269058d483a11ced4f
//都是链表基本操作,记录一下
//创建链表结构
//链表插入:listnode->next = listtmp->next; listtmp->next = listnode;
//链表删除: listtmp->next = listtmp->next->next;//这里有内存泄漏
//删除的话代码里为了保留我的憨批写法所以没动,这里记录一下正确的删除方法吧:
//其实就是把要删除的点记录一下,next跳过它之后再删掉:
//ListNode* listhelp = listtmp->next;listtmp->next = listtmp->next->next; delete listhelp;
#include<iostream>
using namespace std;class ListNode{
public:
ListNode* next = nullptr;
int val;
};
int main(){
int N,headval;
cin >> N >> headval;
ListNode* head = new ListNode;
head->val = headval;
for(int i = 0;i<N-1;++i){
int start,end;
cin >> end >> start;
ListNode* listnode = new ListNode;
listnode->val = end;
//遍历当前链表,找到start的节点
ListNode* listtmp = head;
while(listtmp != nullptr){
if(listtmp->val == start){
listnode->next = listtmp->next;
listtmp->next = listnode;
break;
}
listtmp = listtmp->next;
}
}
//删除节点
int deletenode;
cin >> deletenode;
ListNode* listtmp = head;
while(listtmp->next != nullptr){
if(listtmp->next->val == deletenode){
listtmp->next = listtmp->next->next;//这里有内存泄漏
break;
}
listtmp = listtmp->next;
}
while(head!= nullptr){
cout << head->val << " ";
head = head->next;
}
cout << endl;
return 0;
}