网上的正确代码
#include <stdio.h>
#include <math.h>
typedef struct Node
{
int date;
int next;
} Node;
int first[100005]; // 存放第一条链表的地址
int f = 0;
;
int isVisited[100005]; // 判断是否有重复,0代表未重复,1代表已存在
int is = 0;
int last[100005]; // 存放第二条链表的地址
int l = 0;
void print(Node arr[], int g[], int n);
int main()
{
Node arr[100005];
int head; // 首地址
int n;
int ads;
scanf("%d %d", &head, &n);
for (int i = 0; i < n; i++)
{
scanf("%d", &ads);
scanf("%d %d", &arr[ads].date, &arr[ads].next);
}
int p = head;
while (p != -1)
{
is = abs(arr[p].date); // 取出键值的绝对值
// 判断该键值是否存在
if (!isVisited[is])
{
// 该键值不存在
first[f++] = p; // 将该键值的地址放入第一条链表中
isVisited[is] = 1; // 将该键值位置置为1,表示已存在
}
else
{
// 该键值存在
last[l++] = p; // 将该键值地址放入第二条链表中
}
p = arr[p].next; // 移向下一位置
}
print(arr, first, f);
print(arr, last, l);
return 0;
}
void print(Node arr[], int g[], int n)
{
for (int i = 0; i < n; i++)
{
if (i == n - 1)
{
printf("%05d %d -1\n", g[i], arr[g[i]].date);
}
else
{
printf("%05d %d %05d\n", g[i], arr[g[i]].date, g[i + 1]);
}
}
}
我的代码
#include <stdio.h>
#include <math.h>
struct node
{
int add;
int data;
int next;
} l1[100000], l2[100000], l3[100000], l4[100000];
int judge[10000], first, n, a, b;
void cunshuju()
{
scanf("%d %d", &first, &n);
int i;
for (i = 0; i < n; i++)
{
int add, data, next;
scanf("%d %d %d", &add, &data, &next);
l1[add].add = add;
l1[add].data = data;
l1[add].next = next;
/* if (next == -1)
break; */
}
int index = first;
i = 0;
while (index != -1)
{
l2[i++] = l1[index];
index = l1[index].next;
if (l1[index].add == -2)
break;
}
n = i;
/* printf("n = %d\n", n); */
}
void quchong()
{
int i;
a = 0;
b = 0;
for (i = 0; i < n; i++)
{
if (!judge[abs(l2[i].data)])
{
l3[a++] = l2[i];
judge[abs(l2[i].data)] = 1;
}
else
l4[b++] = l2[i];
}
}
void shuchu()
{
int i;
for (i = 0; i < a; i++)
{
if (i != a - 1)
printf("%05d %d %05d\n", l3[i].add, l3[i].data, l3[i + 1].add);
else
printf("%05d %d -1\n", l3[i].add, l3[i].data);
}
for (i = 0; i < b; i++)
{
if (i != b - 1)
printf("%05d %d %05d\n", l4[i].add, l4[i].data, l4[i + 1].add);
else
printf("%05d %d -1", l4[i].add, l4[i].data);
}
}
void l1chushihua()
{
int i;
for (i = 0; i < 100000; i++)
{
l1[i].add = -2;
l1[i].data = -2;
l1[i].next = -2;
}
}
int main()
{
l1chushihua();
cunshuju();
quchong();
shuchu();
return 0;
}