如何打印结构链表中的第一个节点?
How to print the first node from a linked list of structs?
下面是我的代码中的一个最小可重现示例。我正在做的是在结构列表中插入数据并在控制台上打印它们。
我想从每个 link 中仅打印插入到每个结构列表中的第一个元素。
但是当我的结构中没有数据时,这怎么可能:
typedef struct Node
{
int rollnumber, src, dst;
double gentime;
struct Node *next;
} Node;
(rollnumber, src, dst,gentime 是我从文本文件中读取的信息,但是读取代码不是必需的,所以我用testdata写了。)
最小可复制示例
#include <stdio.h>
#include <stdlib.h>
#define N 10
typedef struct Node
{
int data;
struct Node* next;
} Node;
int push_front(Node** head, int data)
{
Node* new_node = malloc(sizeof(Node));
int success = new_node != NULL;
if (success)
{
new_node->data = data;
new_node->next = *head;
*head = new_node;
}
return success;
}
void output(Node* head)
{
for (Node* current = head; current != NULL; current = current->next)
{
printf("%d ", current->data);
}
}
void display(Node** set, int i)
{
output(set[i]);
putchar('\n');
}
int main(void)
{
int testdata = 1;
Node* link[N] = { 0 };
struct Node* head = NULL;
for (int i = 0; i < N; i++) {
push_front(&link[i], testdata++);
push_front(&link[i], testdata++);
}
for (int i = 0; i < N; i++) {
printf("link[%d]:", i);
display(link, i);
}
}
如果我是对的,你想要列表的第一个元素吗??
如果不是你的工作方式,你将新节点推到旧节点前面,所以你的第一个节点现在是行中的最后一个,所以你需要做的就是迭代列表直到 Node * next == null,那个节点就是你的答案
Node *getLastInLine( Node *Head){
Node *ptr;
ptr = Head;
if( ptr == NULL) return NULL;
while(ptr-> next != NULL){
ptr = ptr->next;
}
return ptr;
}
如果只想打印每个 link 列表的第一个元素,不要在 output
:
中循环
void output(Node* head)
{
printf("%d ", head->data);
}
下面是我的代码中的一个最小可重现示例。我正在做的是在结构列表中插入数据并在控制台上打印它们。
我想从每个 link 中仅打印插入到每个结构列表中的第一个元素。
但是当我的结构中没有数据时,这怎么可能:
typedef struct Node
{
int rollnumber, src, dst;
double gentime;
struct Node *next;
} Node;
(rollnumber, src, dst,gentime 是我从文本文件中读取的信息,但是读取代码不是必需的,所以我用testdata写了。)
最小可复制示例
#include <stdio.h>
#include <stdlib.h>
#define N 10
typedef struct Node
{
int data;
struct Node* next;
} Node;
int push_front(Node** head, int data)
{
Node* new_node = malloc(sizeof(Node));
int success = new_node != NULL;
if (success)
{
new_node->data = data;
new_node->next = *head;
*head = new_node;
}
return success;
}
void output(Node* head)
{
for (Node* current = head; current != NULL; current = current->next)
{
printf("%d ", current->data);
}
}
void display(Node** set, int i)
{
output(set[i]);
putchar('\n');
}
int main(void)
{
int testdata = 1;
Node* link[N] = { 0 };
struct Node* head = NULL;
for (int i = 0; i < N; i++) {
push_front(&link[i], testdata++);
push_front(&link[i], testdata++);
}
for (int i = 0; i < N; i++) {
printf("link[%d]:", i);
display(link, i);
}
}
如果我是对的,你想要列表的第一个元素吗??
如果不是你的工作方式,你将新节点推到旧节点前面,所以你的第一个节点现在是行中的最后一个,所以你需要做的就是迭代列表直到 Node * next == null,那个节点就是你的答案
Node *getLastInLine( Node *Head){
Node *ptr;
ptr = Head;
if( ptr == NULL) return NULL;
while(ptr-> next != NULL){
ptr = ptr->next;
}
return ptr;
}
如果只想打印每个 link 列表的第一个元素,不要在 output
:
void output(Node* head)
{
printf("%d ", head->data);
}