C中的链表实现(只打印最后两个节点)
Linked list implementation in C(printing only last two nodes)
#include <stdlib.h>
#include <stdio.h>
struct node {
int data;
struct node *next;
};
void addLast(struct node **head, int value);
void printAll(struct node *head);
struct node *head1 = NULL;
int main() {
addLast(&head1, 10);
addLast(&head1, 20);
addLast(&head1, 30);
addLast(&head1, 40);
printAll(head1);
return 0;
}
void addLast(struct node **head, int value) {
struct node *newNode = (struct node*)malloc(sizeof(struct node));
newNode->data = value;
if (*head == NULL) {
*head = newNode;
(*head)->next = NULL;
} else {
struct node **temp = head;
while ((*temp)->next != NULL) {
*temp = (*temp)->next;
}
(*temp)->next = newNode;
newNode->next = NULL;
}
}
void printAll(struct node *head) {
struct node *temp = head;
while (temp != NULL) {
printf("%d->", temp->data);
temp = temp->next;
}
printf("\n");
}
addLast()
将在列表末尾附加新节点,printAll()
,我正在打印整个列表。
每次打印列表时,我只能看到最后两个节点。
谁能帮忙,为什么循环没有遍历整个列表?
函数addLast
太复杂,结果是错误的,因为这个语句
*temp = (*temp)->next;
在 while 循环中。它总是改变头节点。
按以下方式定义函数
int addLast( struct node **head, int value )
{
struct node *newNode = malloc( sizeof( struct node ) );
int success = newNode != NULL;
if ( success )
{
newNode->data = value;
newNode->next = NULL:
while( *head ) head = &( *head )->next;
*head = newNode;
}
return success;
}
请注意,无需将变量 head1
声明为全局变量。最好在函数 main
.
内声明
此外,在退出程序之前应释放所有分配的内存。
#include <stdlib.h>
#include <stdio.h>
struct node {
int data;
struct node *next;
};
void addLast(struct node **head, int value);
void printAll(struct node *head);
struct node *head1 = NULL;
int main() {
addLast(&head1, 10);
addLast(&head1, 20);
addLast(&head1, 30);
addLast(&head1, 40);
printAll(head1);
return 0;
}
void addLast(struct node **head, int value) {
struct node *newNode = (struct node*)malloc(sizeof(struct node));
newNode->data = value;
if (*head == NULL) {
*head = newNode;
(*head)->next = NULL;
} else {
struct node **temp = head;
while ((*temp)->next != NULL) {
*temp = (*temp)->next;
}
(*temp)->next = newNode;
newNode->next = NULL;
}
}
void printAll(struct node *head) {
struct node *temp = head;
while (temp != NULL) {
printf("%d->", temp->data);
temp = temp->next;
}
printf("\n");
}
addLast()
将在列表末尾附加新节点,printAll()
,我正在打印整个列表。
每次打印列表时,我只能看到最后两个节点。
谁能帮忙,为什么循环没有遍历整个列表?
函数addLast
太复杂,结果是错误的,因为这个语句
*temp = (*temp)->next;
在 while 循环中。它总是改变头节点。
按以下方式定义函数
int addLast( struct node **head, int value )
{
struct node *newNode = malloc( sizeof( struct node ) );
int success = newNode != NULL;
if ( success )
{
newNode->data = value;
newNode->next = NULL:
while( *head ) head = &( *head )->next;
*head = newNode;
}
return success;
}
请注意,无需将变量 head1
声明为全局变量。最好在函数 main
.
此外,在退出程序之前应释放所有分配的内存。