C语言 链表 基本操作

1 篇文章 0 订阅

#include<stdio.h>
#include<stdlib.h>
typedef int val;
typedef struct node //定义链表形式
{
    int val;
    struct node * next;
}node, * pnode;
#define LEN sizeof(struct node)

pnode cr()  //创建链表
{
    int cnt,i,val;     
    pnode pHead = NULL;    
    pHead = (pnode) malloc(sizeof(node));
    pnode pTail = pHead;    
    printf("请输入节点的个数:\n");    
    scanf("%d",&cnt);    
    for(i=1;i<=cnt;i++)    
    {        
        printf("请输入第%d节点的值\n",i);        
        scanf("%d",&val);        
        pnode pNew;        
        pNew = (pnode) malloc(sizeof(node));                
        pNew->val = val;                
        pTail->next = pNew;        
        pTail = pNew;        
        pNew->next = NULL;    
    }    
    return pHead;
}


pnode append(pnode head,val e)  //链表尾部添加
{
          pnode p,w;
      p=head;
      while(p->next!=0)
      {
          p=p->next;
      }
      w=(pnode)malloc(sizeof(LEN));
      w->val=e;
      p->next=w;
      w->next=NULL;
      return head;

}

pnode change(pnode h,int n)  //改变链表位于n位置节点的值
{
    pnode p=h;
    int i=0;
    while(i<n && p!=NULL)
    {
        p=p->next;
        i++;
    }
    if(p!=NULL)
    {
        puts("input the value ,please:");
        scanf("%d",&p->val);
    }
    else{
        puts("node is not exit!");
    }
    return h;

}

pnode delet(pnode h,int n)    //删除位于n位置的节点
{
    pnode p=h,w;
    int i=0;
    while(i<n && p!=NULL)
    {
        w=p;
        p=p->next;
        i++;
    }
    if(p!=NULL)
    {
        w->next=p->next;
        free(p);
    }
    return h;
}

pnode insert(pnode h,int n,val e)   //在n位置插入值为e的节点
{
    pnode p=h,w;
    int i=0;
    while(i<n && p!=NULL)
    {
        p=p->next;
        i++;
    }
    if(p!=NULL)
    {
        w=(pnode)malloc(sizeof(LEN));
        w->val=e;
        w->next=p->next;
        p->next=w;
    }
    return h;
}

 

 

void tr(pnode pHead)//链表遍历并输出
{
    int i = 1;    
    pnode p = pHead->next;    
    while(p != NULL)
    {
    printf("第%d个节点的值为%d\n",i,p->val);        
    p = p->next;        
    i++;
    }
}

pnode re(pnode head)//链表逆序
{
    pnode p,q,r;
    p=head->next;
    q=NULL;   //为了while下面循环中第一次循环,使原链表头节点下一个节点变为链表尾部
    head->next=NULL;//使原链表的头部剥离
    while(p!=NULL)
    {
        
        r=p->next;
        p->next=q;//第一次循环时产生新链表尾部,后面就不是了,因为下面的q=p语句对q赋值
        q=p;
        p=r;

    }
    head->next =q;
    return head;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值