Closed. This question is off-topic。它当前不接受答案。
想改善这个问题吗? Update the question,所以它是on-topic,用于堆栈溢出。
2年前关闭。
我编写此代码是为了对链表执行推入和反向操作,但是推入/反向功能无法正常工作。我不知道问题出在哪里,一切似乎都很好。有人可以帮我吗?我认为链接列表的开头或函数的参数有问题。我需要声明一个指针作为参数吗?
那是
要么
同样,您正在分配
想改善这个问题吗? Update the question,所以它是on-topic,用于堆栈溢出。
2年前关闭。
我编写此代码是为了对链表执行推入和反向操作,但是推入/反向功能无法正常工作。我不知道问题出在哪里,一切似乎都很好。有人可以帮我吗?我认为链接列表的开头或函数的参数有问题。我需要声明一个指针作为参数吗?
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<malloc.h>
struct node {
int data;
struct node *next;
};
typedef struct node NODE;
NODE *head1 = NULL;
int flag = 1;
int choice;
void push(NODE*);
void menu();
void reverse(NODE*);
void display(NODE*);
int main() {
do {
menu();
if (choice == 1) {
push(head1);
display(head1);
}
else if (choice == 2) {
reverse(head1);
display(head1);
}
else {
break;
}
} while (1);
}
void push(NODE *head) { //function to create the linked list
int choice1, flag = 1;
do {
NODE *new_node = (NODE*)malloc(sizeof(NODE*));
puts("Enter new node data:");
scanf("%d", &new_node->data);
if (!head) {
head = new_node;
head->next = NULL;
}
else {
new_node->next = head;
head = new_node;
}
puts("Do you want to continue? Press 1:");
fflush(stdin);
scanf("%d", &choice1);
if (choice1 != 1) {
flag = 0;
}
} while (flag);
}
void menu() {
puts("Enter 1 to push, 2 to reverse, anything else to exit:");
scanf("%d", &choice);
}
void reverse(NODE *head) { //function to reverse it
NODE *prev = NULL, *next = NULL;
NODE *current = head;
while (current) {
next = current->next;
current->next = prev;
prev = current;
current = next;
}
head = prev;
}
void display(NODE *head) {
NODE *temp = head;
puts("Status of the linked list:");
for (; temp; temp = temp->next) {
printf("%d=> ", temp->data);
}
puts("NULL");
}
最佳答案
此代码有很多错误。我将从一小段开始。
/* global */
NODE *head1 = NULL;
/* in main */
push(head1);
void push(NODE *head) { //function to create the linked list
int choice1, flag = 1;
do {
NODE *new_node = (NODE*)malloc(sizeof(NODE*));
puts("Enter new node data:");
scanf("%d", &new_node->data);
if (!head) {
head = new_node;
head->next = NULL;
}
push()
正在获取指向NODE的指针,先分配一些东西,然后将其分配给该指针。这只会修改push()中指针的本地副本,而不会修改head1
。要修改head1
,您需要返回一个指针或获取一个指向该指针的指针。那是
void push(NODE** head)
要么
NODE* push(NODE* head)
head1 = push(head1);
同样,您正在分配
sizeof(NODE*)
,即指针的大小(通常为8或4个字节)。这应该是sizeof(NODE)
。关于c - 如何调试此代码的链表? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47812611/
10-11 15:31