链表的基础操作创建插入删除输出

创建有n个元素的链表,链表的元素的添加,链表元素的删除,链表的输出。

声明结构类型和主函数

#include<bits/stdc++.h>
using namespace std; 
node *creat(int n);//创建有个n个结点的单链表 
node *insert(node *h,int m,int l);//在单链表的第几个元素之后插入值l
node *remove(node *h,int t,int n);//删除链表中值为t的元素
void show(node *h);//输出n个结点的单链表 
struct node
{
 int data;
 node *next;
};
int n,m,l,t;//n为链表结点的个数,m是在链表第几个之后插入元素l,t为要删除的链表中相同的元素
int main()
{
 node *head;//创建头结点
 cin>>n;
 head=creat(n);//创建有n个元素的链表
 show(head);//输出
 cout<<endl;
 cin>>m>>l;
 head=insert(head,m,l);//插入
 show(head);
 cin>>t;
 head=remove(head,t,n+1);//删除
 show(head);
}

链表的创建

node *creat(int n)
{
 node *h,*p;
 h=new node;//建立第一个结点
 p=h;
 for(int i=1;i<=n;i++)
 {
  cin>>p->data;//向结点赋值
  if(i<n)//建立后续结点
  {
   p->next=new node;
   p=p->next;
  }
 }
 p->next=h;//构成链环
 return h;
}
图片演示

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
构成链环

链表的输出

void show(node *h)//输出n个结点的单链表 
{
 node *p;
 p=h;
do{
  cout<<p->data<<" ";
  p=p->next;
 }while(p!=h);
}

链表的插入

node *insert(node *h,int m,int l)//在单链表的第几个元素之后插入链表
{
 node *p,*s;
 int i=0;//用来判断位置
 p=h;
 s=new node;
 do{
  i++;
  if(i==m) 
  {
   s->next=p->next;
   p->next=s;
   s->data=l;
  }
  else p=p->next;
  
 }while(p!=h);
 return h;
 }

链表中的结点删除

node *remove(node *h,int t,int n)//删除链表中值为t的元素
{
 int i=0;
 node *p=h;
 do
 {
  if(p->next->data==t)
  {
   p->next=p->next->next;//p所指向的下一个结点被赋值为下两个结点
   if(i==n-1) return h->next;//判断是否是第一个元素 如果是直接不返回第一个结点
   else return h;
  }  
  else 
  {
   p=p->next;//向后遍历
   i++;
  }
  
 }while(p!=h);
 
} 

总结:注意该链表为循环链表。创建链表和插入、删除操作都是返回头结点。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
链表的逆序创建插入删除等基本操作算法如下: 1. 链表的逆序创建: 1.1 定义一个指向链表头结点的指针head,一个指向新节点的指针pnew和一个指向上一个节点的指针pre。 1.2 将head指针指向NULL,表示链表为空。 1.3 循环输入新节点的值,直到输入0为止。 1.4 创建一个新节点pnew,将输入的值赋值给pnew->data。 1.5 如果head指针为NULL,则将head指向pnew,pnew->next指向NULL。 1.6 如果head指针不为NULL,则将pnew->next指向head,head指向pnew。 1.7 将pre指向pnew,以便下一次循环使用。 1.8 最后输出链表中所有节点的值。 2. 链表插入操作: 2.1 定义一个指向链表头结点的指针head、一个指向待插入节点的指针pnew和一个指向待插入位置前一个节点的指针pre。 2.2 创建一个新节点pnew,将待插入值赋值给pnew->data。 2.3 如果head指针为NULL,则将head指向pnew,pnew->next指向NULL。 2.4 如果head指针不为NULL,则使用循环找到待插入位置的前一个节点pre。 2.5 将pnew->next指向pre->next,将pre->next指向pnew,完成插入操作。 2.6 最后输出链表中所有节点的值。 3. 链表删除操作: 3.1 定义一个指向链表头结点的指针head、一个指向待删除节点的指针pdel和一个指向待删除位置前一个节点的指针pre。 3.2 如果head指针为NULL,则提示链表为空,删除操作无法进行。 3.3 如果head指针不为NULL,则使用循环找到待删除位置的前一个节点pre。 3.4 如果pre->next指向NULL,则提示该位置不存在节点,删除操作无法进行。 3.5 如果pre->next指向待删除节点pdel,则将pre->next指向pdel->next,完成删除操作。 3.6 释放pdel节点的内存空间。 3.7 最后输出链表中所有节点的值。 以上就是链表的逆序创建插入删除等基本操作算法。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值