如何在C中实现单链表

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在C中实现单链表相关的知识,希望对你有一定的参考价值。

我想在C中填充我的链表,但是id不会说出我想要的内容。我想保持指针“p”并继续使用相同的指针添加到列表中。但是当我尝试打印时,它只打印头部的数据!

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

 typedef struct
  int data;
  struct node *next;
node;

int main()
   node *head = NULL;
   head =  malloc(sizeof(node));
   if(head==NULL)
     printf("ta foirer quelque chose frero!");
     return 1;
   
   (*head).data=3;
   (*head).next=NULL;

   node *p = NULL;

  p = (node*) head->next;
  p =  malloc(sizeof(node));
  p->data = 5;

  p->next = NULL;
  p= (node *)p->next;

  int i=0;
  while(i<5)
    p =  malloc(sizeof(node));
    i++;
    p->data = i;
    p->next=NULL;
    p= (node *)p->next;
  


  p = head;

  while(p)
    printf("\n%d",p->data);
    p =(node*) p->next;
  

  return 0;

我得到了输出

3

我期待着

3
5
0
1
2
3
4
答案
#include<stdio.h>
#include <stdlib.h>

struct Node 
  int data;
  struct Node *next;
;

typedef struct Node node;

void insert(node* h, int v) 
    node* tmp = h;

    while(tmp->next)
        tmp = tmp->next;
    node* newnode = malloc(sizeof(node));
    newnode->data = v;
    newnode->next = NULL;
    tmp->next = newnode;


int main()
   node *head = NULL;
   head =  malloc(sizeof(node));
   if(head==NULL)
     printf("ta foirer quelque chose frero!");
     return 1;
   
   head->data=3;
   head->next = NULL;


   node *p = NULL;

  insert(head, 5);
  int i=0;
  while(i<5)
    insert(head, i++);
  


  p = head;

  while(p)
    printf("%d\n",p->data);
    p = p->next;
  

  return 0;

如果您注意到,我稍微更改了代码的布局,并使其更清晰。您需要的是遍历以找到在添加新节点的位置之前出现的节点,在这种情况下是结束。通常,这是包含头部的不同结构中的单独指针,这称为链表的尾部。您根本没有跟踪真正添加节点的位置。上面的插入函数就是这样做的。

以上是关于如何在C中实现单链表的主要内容,如果未能解决你的问题,请参考以下文章

九顺序表和单链表的对比分析

数据结构 单链表&顺序表

如何在EF中实现left join查询

如何在 s-s-rS 报告中实现类似 Excel 的条件格式和“色标”

如何在hibernate中实现对两个表的查询数据?

如何在两个表之间的组中实现递归连接?