地址 键值 下一个结点
其中地址是该结点的地址,键值是绝对值不超过104的整数,下一个结点是下个结点的地址。
输出格式 首先输出去重后的链表,然后输出被删除的链表。每个结点占一行,按输入的格式输出。
输入样例
00100 5 99999 -7 87654 23854 -15 00000 87654 15 -1 00000 -15 99999 00100 21 23854 输出样例 00100 21 23854 23854 -15 99999 99999 -7 -1 00000 -15 87654 87654 15 -1 代码 #include<bits/stdc++.h> using namespace std; struct node{ int key; int next; }; struct node L[100000]; bool flag[100000];//标志数组 int newL[100000],del[100000];//存放地址 int main() { int first,N,addr; cin>>first>>N; for(int i=0;i<N;i++)//输入 { cin>>addr; cin>>L[addr].key>>L[addr].next; } memset(flag,true,sizeof(flag));//对flag[100000]全部赋值1 int num1=0,num2=0; for(int i=first;i!=-1;) { int k=abs(L[i].key); if(flag[k])//K是第一个键值 { flag[k]=false; newL[num1++]=i;//把地址存进newL里面,新链表的地址 } else del[num2++]=i; i=L[i].next;//下一个结点,i作为数组下标 } printf("d %d ",newL[0],L[newL[0]].key); for(int i=1;i<num1;i++) { printf("d\n",newL[i]);//输出当前结点的地址,同时也是上一结点的next printf("d %d ",newL[i],L[newL[i]].key);//输出地址和键值 } printf("-1\n");//新链表结束 if(num2)//删掉的链表不空 { printf("d %d ",del[0],L[del[0]].key); for(int i=1;i<num2;i++) { printf("d\n",del[i]);//输出下一个节点的地址 printf("d %d ",del[i],L[del[i]].key);//输出地址和键值 } printf("-1\n"); } return 0; }