AlenaNuna

导航

HJ48 从单向链表中删除指定值的节点

题目:https://www.nowcoder.com/practice/f96cd47e812842269058d483a11ced4f?tpId=37&tqId=21271&rp=1&ru=/exam/oj/ta&qru=/exam/oj/ta&sourceUrl=%2Fexam%2Foj%2Fta%3FtpId%3D37&difficulty=undefined&judgeStatus=undefined&tags=&title=

链表模板题,这么多年都不太会用C++里自带的链表,只会自己手写,正好练一下

由于是单向并且没有重复数字的链表,所以链表长度为n时读入的边条数就是n-1。用哈希表存储每个数值对应的地址。读入时判断一下哈希值是否存在,如果哈希值存在则说明这个点刚刚出现过,现在又出现是要进行点插入操作。其他正常处理维护一下就行。

ListNode(int x):val(x),next(nullptr){};是结构体构造函数的一种简便写法,用于初始化一个点的val=x,next=nullptr;

其实除了系统自带链表的用法有点复杂以外真没什么好说的。

华为光产品线我来了> <为啥不是华为计算呢?因为华为计算人太多了怕挤不过,而且光产品的主管很爱我的样子QwQ

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 struct ListNode{
 4     int val;
 5     ListNode* next;
 6     ListNode(int x):val(x),next(nullptr){};
 7 };
 8 void PrintList(ListNode* hd){
 9     while(hd!=nullptr){
10         cout<<hd->val<<" ";
11         hd=hd->next;
12     }
13     return;
14 }
15 ListNode* Delete(int val,ListNode* hd){
16     ListNode* dummy=new ListNode(0);
17     dummy->next=hd;
18     ListNode* pre=dummy;
19     ListNode* cur=hd;
20     while(cur!=nullptr){
21         if(cur->val==val){
22             pre->next=cur->next;
23             delete cur;
24             break;
25         }
26         pre=cur;
27         cur=cur->next;
28     }
29     ListNode* newhead=dummy->next;
30     delete dummy;
31     return newhead;
32 }
33 int main(){
34     ios_base::sync_with_stdio(false);
35     cin.tie(NULL);
36     int n,a,b;
37     cin>>n>>a;
38     ListNode* hd=new ListNode(a);
39     unordered_map<int,ListNode*>hash;
40     hash[a]=hd;
41     for(int i=1;i<n;i++){
42         cin>>a>>b;
43         ListNode* ia;
44         ListNode* ib;
45         if(hash[a]==nullptr)ia=new ListNode(a);
46         else ia=hash[a];
47         if(hash[b]==nullptr)ib=new ListNode(b);
48         else ib=hash[b];
49         if(ib->next==nullptr)
50             ib->next=ia;
51         else{
52             ia->next=ib->next;
53             ib->next=ia;
54         }
55         if(ia==hd) hd=ib;
56         hash[a]=ia;
57         hash[b]=ib;
58     }
59     int deleteval;
60     cin>>deleteval;
61     PrintList(Delete(deleteval,hd));
62     return 0;
63 }

by:AlenaNuna

posted on 2024-09-11 03:15  AlenaNuna  阅读(5)  评论(0编辑  收藏  举报