c0dezera 2020-09-13 04:24 采纳率: 20%
浏览 72
已结题

C语言入门题,我的代码循环出不来了,请问是什么问题,如何修改

7-1 链表去重 (25 分)

给定一个带整数键值的链表 L,你需要把其中绝对值重复的键值结点删掉。即对每个键值 K,只有第一个绝对值等于 K 的结点被保留。同时,所有被删除的结点须被保存在另一个链表上。例如给定 L 为 21→-15→-15→-7→15,你需要输出去重后的链表 21→-15→-7,还有被删除的链表 -15→15。

输入格式:

输入在第一行给出 L 的第一个结点的地址和一个正整数 N(≤100000 ,为结点总数)。一个结点的地址是非负的 5 位整数,空地址 NULL 用 -1 来表示。

随后 N 行,每行按以下格式描述一个结点:

地址 键值 下一个结点

其中地址是该结点的地址,键值是绝对值不超过10000​​ 的整数,下一个结点是下个结点的地址。

输出格式:

首先输出去重后的链表,然后输出被删除的链表。每个结点占一行,按输入的格式输出。

输入样例:

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<stdio.h>


struct Node {
	int address;
	int data;
	int next;
};


struct Node A[100000];


int main() {
	int data[10000] = { 0 };
	int head, N;
	scanf("%d %d", &head, &N);
	int i;
	int address, dat, next;
	for (i = 0; i < N; i++) {
		scanf("%d %d %d", &address, &dat, &next);
		A[address].address = address;
		A[address].data = dat;
		A[address].next = next;
	}
	int cur = head;
	int tmp = A[cur].next;
	int head2,cur2;
	int flag = 1;
	data[A[cur].data] = 1;
	while (A[tmp].address != -1) {
		if (data[A[tmp].data] == 0) {
			data[A[tmp].data] = 1;
			tmp = A[tmp].next;
			cur = A[cur].next;
		}
		else if (data[A[tmp].data] == 1) {
			A[cur].next = A[tmp].next;
			if (flag) { 
				head2 = tmp
				cur2 = head2;
				flag = 0;
			}
			else {
				A[cur2].next = tmp;
				cur2 = A[cur2].next;
			}
			tmp = A[cur].next;
		}
	}
	cur = head;
	cur2 = head2;
	while (A[cur].next != -1) {
		printf("%d ", A[cur].data);
		cur = A[cur].next;
	}
	printf("\n");
	while (A[cur2].next != -1) {
		printf("%d ", A[cur2].data);
		cur2 = A[cur2].next;
	}
}
  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥20 我想使用一些网络协议或者部分协议也行,主要想实现类似于traceroute的一定步长内的路由拓扑功能
    • ¥30 深度学习,前后端连接
    • ¥15 孟德尔随机化结果不一致
    • ¥15 apm2.8飞控罗盘bad health,加速度计校准失败
    • ¥15 求解O-S方程的特征值问题给出边界层布拉休斯平行流的中性曲线
    • ¥15 谁有desed数据集呀
    • ¥20 手写数字识别运行c仿真时,程序报错错误代码sim211-100
    • ¥15 关于#hadoop#的问题
    • ¥15 (标签-Python|关键词-socket)
    • ¥15 keil里为什么main.c定义的函数在it.c调用不了