数据结构-对链表的基本操作

 #include<stdio.h>
#include<stdlib.h>
typedef struct ListNode{
    int data;
    struct ListNode *next;
}ListNode;
ListNode *CreateLinkList(ListNode *);
void display(ListNode*);
void destory(ListNode*);
ListNode *delElem(ListNode*,int);
ListNode *insertElem(ListNode *p,int elem,int add);
//创建
ListNode *CreateLinkList(ListNode *p){
    int i;
    ListNode *temp=p;
    temp->next=NULL;
    p=temp;
    for(i=1;i<6;i++){
      ListNode *a=(ListNode*)malloc(sizeof(ListNode));
      a->data=i;
      a->next=NULL;
      temp->next=a;
      temp=temp->next;
    }
    return p;
}
//销毁
void destory(ListNode *p){
    ListNode *L=p;
    while(L){
       L= L->next;
       free(p);
    }
}
//输出链表
void display(ListNode *p)
 {
    ListNode* temp =p;//将temp指针重新指向头结点
    //只要temp指针指向的结点的next不是Null,就执行输出语句。
    while (temp) {
         temp = temp->next;
        printf("%d\t", temp->data);
       
    }
}
//在指定位置插入元素
ListNode *insertElem(ListNode *p,int elem,int add){ 
    ListNode *temp=p;
    ListNode *c=NULL;
    int i;
    for(i=1;i<add;i++){
       temp=temp->next;
   }
    c=(ListNode*)malloc(sizeof(ListNode));
    c->data=elem;
    c->next=temp->next;
    temp->next=c;
    return p;
}
//删除指定位置元素
ListNode *delElem(ListNode *p,int index){
    ListNode *temp=p;
    ListNode *del=NULL;
    int i;
    for(i=1;i<index;i++){
        temp=temp->next;
    }
    del=temp->next;
    temp->next=temp->next->next;
    free(del);
    return p;
}
int main(){
    ListNode *p =(ListNode*)malloc(sizeof(ListNode));
     CreateLinkList(p);  
    // destory(p);
     insertElem(p,6,2);
     delElem(p,1);
     display(p);
      return 0;
}

}

话不多说先向大家展示代码

1…链表的创建

图示过程:
在这里插入图片描述
代码:
ListNode *CreateLinkList(ListNode *p){
int i;
ListNode *temp=p; //创建临时节点temp用于对链表p进行遍历
temp->next=NULL;
for(i=1;i<6;i++){
ListNode a=(ListNode)malloc(sizeof(ListNode));//创建结点a
a->data=i; //对a结点进行赋值
a->next=NULL;
temp->next=a; //temp直行新创建的a结点
temp=temp->next; // 将temp向后移动一个节点
}
return p;
}

2.链表的插入

图示过程
在这里插入图片描述

ListNode *insertElem(ListNode *p,int elem,int add){
ListNode *temp=p; // 创建临时节点p用于接链表首节点并对表 p进行遍历
ListNode c=NULL;
int i;
for(i=1;i<add;i++){ //查找插入位置前一个位置的节点
temp=temp->next;
}
c=(ListNode
)malloc(sizeof(ListNode)); //创建节点此结点是要插入的结点
c->data=elem; //对结点进行赋值
c->next=temp->next; //改变链表指向
temp->next=c; //改变链表指向
return p;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值