gpt4 book ai didi

c - 使用函数处理链表的程序可以运行,但产生的结果为 1

转载 作者:行者123 更新时间:2023-11-30 14:37:48 25 4
gpt4 key购买 nike

我正在为类编写一个程序,该程序使用函数来处理链接列表。我的程序正在运行,只是它产生的结果是 1。功能如下所述 -

  • printRev -该函数将利用双重功能反向打印列表列表的链接功能。

  • 删除节点 -该函数将从列表中删除一个节点,其中数据与输入值匹配。为简单起见,您可以删除第一次出现的值

  • insertFront -将新节点插入到列表的前面

  • 插入返回 -将新节点插入到列表后面

  • 打印 -打印当前链接列表

  • 最大 -返回列表中的最大值。 (不打印)

  • 分钟 -返回列表中的最小值(不打印)

  • locInList -返回 a 的位置列表中的编号。 (不打印)

我的 printprintRevMinlocInList 函数似乎工作正常。

#include <stdio.h>
#include <stdlib.h>

struct node
{
int data;
struct node *next;
struct node *prev;
};
typedef struct node node;


void printRev(node* head);
node* removeNode(node* head, int d);
node* insertFront(node* head, int d);
node* insertBack(node* head, int d);
void print(node* head);
int max(node* head);
int min(node* head);
int locInList(node* head, int x);

int main()
{

node* head = NULL;

head = insertFront(head, 5);
head = insertFront(head, 4);
head = insertBack(head, 6);
head = insertBack(head, 7);
print(head);
printRev(head);

printf("Max: %d\n", max(head));
printf("Min: %d\n", min(head));
printf("locInList 5: %d\n", locInList(head, 5));
printf("locInList 9: %d\n", locInList(head, 9));

head = removeNode(head, 6);
print(head);
head = removeNode(head, 4);
print(head);
head = removeNode(head, 7);
print(head);


return 0;
}

void printRev(node* head)
{
node *cur = head;
node *tmp = NULL;
if (cur == NULL){
return;
}else{
while(cur->next != NULL){
cur = cur->next;
}
while(cur != NULL){
printf("%d ", cur->data);
cur = cur->prev;
}
}
printf("\n");
}

node* removeNode(node* head, int d)
{

node *tmp = head->next;
head->data = head->next->data;
head->next = tmp->next;
free(tmp);
return head;
}

node* insertFront(node* head, int d)
{
node *tmp = NULL;
tmp = malloc(sizeof(node));
tmp->data = d;
tmp->prev = NULL;

if(head == NULL){
return tmp;
}

head->prev = tmp;
tmp->next = head;
return tmp;
}

node* insertBack(node* head, int d)
{
node *tmp = malloc(sizeof(node));
tmp->data = d;
tmp->next = NULL;

if(head == NULL){
tmp->prev = NULL;
return tmp;
}
else{
node *end = head;

while(end->next != NULL){
end = end->next;
}
end->next = tmp;
tmp->prev = end;
}

return head;
}

void print(node* head)
{

node *tmp = head;

while(tmp != NULL){
printf("%d ", tmp->data);
tmp = tmp->next;
}
printf("\n");
}

int max (node* head)
{

int max = head->data;
node *tmp = NULL;
tmp = head;
while(tmp->next != NULL){
if(tmp->data >= max){
max = tmp->data;
}
tmp = tmp->next;
}
return max;
}

int min (node* head)
{
int min = head->data;
node *tmp = NULL;
tmp = head;

while(tmp->next != NULL){
if(tmp->data <= min){
min = tmp->data;
}
tmp = tmp->next;
}
return min;
}
int locInList(node* head, int x)
{

int i = 0;
node *tmp = NULL;
tmp = head;

while(tmp != NULL){
if(tmp->data == x){
return i;
}else{
i++;
tmp = tmp->next;
} }
return -1;

}

我期望输出 -

4 5 6 7
7 6 5 4
最多:7
分钟:4
locInList 5:1
locInList 9:-1
4 5 7
5 7
5

我得到的输出是 -
4 5 6 7
7 6 5 4
最多:6
分钟:4
locInList 5:1
locInList 9:-1
5 6 7
6 7
7

最佳答案

您应该将 while(tmp->next != NULL) 更改为 while(tmp != NULL)。现在,如果没有下一个元素,您就不会检查当前元素。

关于c - 使用函数处理链表的程序可以运行,但产生的结果为 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57030562/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com