如何打印结构链表中的第一个节点?

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);
}