10
社区成员
发帖
与我相关
我的任务
分享这段代码运行后没有输出是怎么回事

#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int data;
struct Node* next;
}Node;
Node* getNewLinklist(int val) {
Node* node = (Node*)malloc(sizeof(Node));
node->data = val;
node->next = NULL;
return node;
}
Node* insert(Node* head,int val) {
Node* new_node = getNewLinklist(val);
if (head == NULL) {
return new_node;
}
new_node->next = head;
return new_node;
}
Node* compare(Node* A, Node* B) {
Node* prev = B, * tempor = B->next;
while(tempor){
int k = 0;
for (Node* p = A; p->next; p = p->next) {
if (B->data == p->data) {
B = B->next;
k = 1;
break;
}
if (tempor->data == p->data) {
prev->next = tempor->next;
k = 1;
break;
}
}
if (k == 1)
continue;
tempor = tempor->next;
prev = prev->next;
}
return B;
}
int main() {
Node* A = NULL,*B = NULL;
int arr1[] = { 1,2,3,4,5 };
int arr2[] = { 4,5,6,7,8 };
for (int i = 0; i < 5; i++) {
A = insert(A, arr1[i]);
B = insert(B, arr2[i]);
}
Node* C = compare(A, B);
for (Node* p = C; p; p = p->next) {
printf("%d ",p->data);
}
}
这段代码运行后没有输出是因为在compare函数中,没有处理B链表中最后一个节点的情况。当tempor指向最后一个节点时,循环结束,但并没有将该节点与A链表中的节点进行比较。因此,在循环结束后,需要再次处理最后一个节点。可以在循环结束后添加以下代码来处理最后一个节点:
for (Node* p = A; p->next; p = p->next) {
if (B->data == p->data) {
B = B->next;
break;
}
if (tempor->data == p->data) {
prev->next = tempor->next;
break;
}
}
添加完以上代码后,再次运行代码就会输出正确的结果。