C语言实现链表的头插,尾插,插入,修改,删除和遍历

#include "stdio.h"
#include "stdlib.h"
#define N sizeof(struct node)


//链表结构体
typedef struct node{
struct node *next;
int data;
}*pnode;


//条件创建链表(头插)
pnode create1(){
pnode head,p,q;
    p=q=(pnode)malloc(N);
q=NULL;
scanf("%d",&p->data);
while(p->data!=0){
p->next=q;
q=p;
p=(pnode)malloc(N);
scanf("%d",&p->data);
}
head=q;
return head;
}


//条件创建链表(尾插)
pnode create2(){
pnode head,p,q;
p=q=(pnode)malloc(N);
head=NULL;
q->next=NULL;
    scanf("%d",&p->data);
    while(p->data!=0){
if(head==NULL)
head=p;
else
   q->next=p;
q=p;
p=(pnode)malloc(N);
scanf("%d",&p->data);
}
q->next=NULL;
return head;
}


//链表的循环(头插)
pnode precreate(int n){
pnode p,head,q;
q=(pnode)malloc(N);
q=NULL;
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
链表是一种常见的数据结构,其中每个节点包含一个数据部分和一个指向下一个节点的指针部分。链表通常通过指针连接起来,形成一个链式结构。对于链表插入操作,常见的有法和法两种方法。 法是将新节点插入链表部,也就是成为新的结点,如下面的代码所示: ```c typedef struct node { int data; struct node *next; } Node; // 法 void insert_head(Node **head, int data) { Node *new_node = (Node*)malloc(sizeof(Node)); // 创建新节点 new_node->data = data; // 将数据复制到节点中 new_node->next = *head; // 将新节点的next指针指向原结点 *head = new_node; // 将新节点设置为新的结点 } ``` 法是将新节点插入链表部,也就是成为新的结点,如下面的代码所示: ```c // 法 void insert_tail(Node **head, int data) { Node *new_node = (Node*)malloc(sizeof(Node)); // 创建新节点 new_node->data = data; // 将数据复制到节点中 new_node->next = NULL; // 将新节点的next指针设置为NULL if (*head == NULL) { // 如果链表为空 *head = new_node; // 新节点成为结点 } else { // 如果链表不为空 Node *p = *head; while (p->next != NULL) { // 遍历链表,找到最后一个节点 p = p->next; } p->next = new_node; // 将新节点插入链表 } } ``` 以上两个函数中,都使用了双重指针来修改结点指针的值。在法中,我们将新节点的next指针指向原结点,再将新节点设置为新的结点;在法中,我们遍历链表找到最后一个节点,然后将新节点插入到末。 当然,以上两种方法都有各自的优缺点,需要根据具体情况来选择使用哪种方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值