gpt4 book ai didi

c - 链表代码不太优雅

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

这是我真正想编写的代码的玩具版本:

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

typedef struct node_s {
char val;
struct node_s *next;
} node;

int n;

char obtain_next_char(){
if (n<100) {
return 'a';
} else {
return 0;
}
}

int main() {

char c;
node *start, *curr;

n = 0;
start = malloc(sizeof(node));
curr = start;

while ((c=obtain_next_char()) != 0) {
curr->val = c;
curr->next = malloc(sizeof(node));
curr = curr->next;
}
curr->next = NULL;

printf("chain made, %d links\n", n);

curr = start;

while (curr != NULL) {
printf(">>>%c<<<\n",curr->val);
curr=curr->next;
}

}

首先,关于obtain_next_char,这里的函数被高度简化。对于真正的函数,无法提前知道返回值是什么。

现在,代码可以工作,但它会在列表末尾产生一个空节点,我必须将其删除。可以重写这段代码来弥补这个缺陷吗?我试图避免在循环头部出现重复的代码,即我不想在循环外部使用代码设置第一个节点,然后在循环内部使用相同的代码设置以下节点。

最佳答案

node dummy, *start, *curr;

curr = &dummy;

while ((c=obtain_next_char()) != 0) {
curr->next = malloc(sizeof(node));
curr = curr->next;
curr->val = c;
}
curr->next = NULL;
start = dummy.next;

关于c - 链表代码不太优雅,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38209130/

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