如何删除 C 程序中的"->"(链表)



我在C编程中有一个链表作业,我们的任务是编写一个接受两个整数输入的程序,并用这些值创建两个节点。使值较大的节点成为第一个节点。第一个节点的下一个节点是另一个输入。

尽管我把程序做对了,但出于某种原因,还有一个额外的"->quot;在我的输出中,我一直在努力分析并解决问题,但我仍在努力解决。我可以请求帮助吗?

#include <stdio.h>
#include <stdlib.h>
typedef struct node{
int value;
struct node* next;
} node;
node* create_node(int value){
node* new_node = (node*)malloc(sizeof(node));
new_node -> value = value;
new_node -> next = NULL;
return new_node;
}
void printList(node* head){
while(head){
printf("%d -> ", head -> value);
head = head -> next;
}
}
int main(){
int num1, num2;
struct node node1;

node* head = NULL;
node* temp = NULL;
printf("Enter number 1: ");
scanf("%d", &num1);
printf("Enter number 2: ");
scanf("%d", &num2);
if(num1 > num2){
head = create_node(num1);
temp = create_node(num2);
head -> next = temp;
} else {
head = create_node(num2);
temp = create_node(num1);
head -> next = temp;
}
printList(head);
return 0;
}

输出应该是

Enter number 1: 1
Enter number 2: 2
2 -> 1

但是我得到的输出是

Enter number 1: 1
Enter number 2: 2
2 -> 1 ->

这就是打印任何节点的值的方法:

printf("%d -> ", head -> value);
->quot;在节点值之后。那么,为什么最后一个节点后面会有而不是呢?

如果你想安排代码,使其打印"->quot;在节点号之后,则必须检测最后一个节点的特殊情况,并避免打印&quot-&gt"那样的话但是,正如@Fe2O3在评论中所建议的那样,将第一个节点作为特例可能更容易。这将涉及打印"->quot每个后续节点之前。

这是堆栈溢出"协助";这就是我们来这里的目的!

下面是代码的一个稍微修改过的版本,显示了一些可供您考虑的替代方案。

#include <stdio.h>
#include <stdlib.h>
typedef struct node {
int value;
struct node *next;
} node;
// calloc() will save you having to ensure the block of heap is initialised
node *create_node( int value ) {
node *nn = calloc( 1, sizeof *nn ); // note 'sizeof' relates to object, not struct
/* omitting check of return code */
nn->value = value;
return nn; // short variable names
}
// printing data values with "prefix" string
// short name, again.
void printList( node *p ) {
for( char *prfx = ""; p; p = p->next, prfx = " -> " )
printf( "%s%d", prfx, p->value );
putchar( 'n' ); // missing newline
}
int main() {
int num1, num2;
printf("Enter number 1: ");
scanf("%d", &num1);
/* omitting check of return code */
printf("Enter number 2: ");
scanf("%d", &num2);
/* omitting check of return code */
// declare variables close to their first use.
// better to use clever code than copy/paste
// larger value into 1st node. sum then subtract pushes smaller value into 2nd
node *head = create_node( num1 > num2 ? num1 : num2 );
head->next = create_node( num1 + num2 - head->value );
printList( head );
return 0;
}

最新更新