链表的相关操作
时间:2022-04-26
本文章向大家介绍链表的相关操作,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
#include<iostream>
using namespace std;
struct node
{
int data;
node *next;
};
//链表的建立,创建有n个结点的链表
node *create(int n)
{
node *head=NULL;
node *p=NULL;
head=new node();
p=head;
cin>>p->data;
node *q;
while(--n)
{
q=new node();
cin>>q->data;
p->next=q;
p=q;
}
p->next=NULL;
return head;
}
//打印结点
void print(node *head)
{
node *p=head;
while(p!=NULL)
{
cout<<p->data<<" ";
p=p->next;
}
cout<<endl;
}
//插入结点
//在指定位置weizhi上插入结点值为n的结点
//这里注意返回值不能写成void因为当weizhi为0的时候,head的值变动了,如果不返回head虽然那么原函数中的head还在原来的位置
node* insert(node *head,int weizhi,int n)
{
node *p=NULL;
if(weizhi<0)
{
return 0;
}
if(weizhi==0)
{
p=new node();
p->data=n;
p->next=head;
head=p;
}
if(weizhi>0)
{
p=head;
int num=weizhi;
while(--num)
{
p=p->next;
}
node *t=p->next;
node *q=new node();
q->data=n;
p->next=q;
q->next=t;
}
return head;
}
//删除第一个值为n的结点
node *delete_node(node *head,int n)
{
if (head==NULL)
{
return NULL;
}
else if(head->data==n)
{
node *p=head;
head=head->next;
delete p;
return head;
}
else
{
node *p,*q;
p=head;
q=p->next;
while(q!=NULL && q->data!=n)
{
p=p->next;
q=q->next;
}
if(q==NULL)
{
return head;
}
else
{
p->next=q->next;
delete q;
return head;
}
}
}
//链表的逆转
node *reverse(node *head)
{
node *p=NULL;//指向要逆转指针的前一个结点
node *r=head;//指向要逆转的结点
node *q=NULL;//指向要逆转结点的后一个结点
while(r!=NULL)
{
q=r->next;
r->next=p;
p=r;
r=q;
}
head=p; //注意全都逆转之后,结点r已经为NULL,结点p才是最后一个有数据的结点
return head;
}
int main()
{
node *head=create(5);
print(head);
head=insert(head,2,100);
print(head);
head=insert(head,0,1000);
print(head);
head=delete_node(head,3);
print(head);
head=delete_node(head,5);
print(head);
head=delete_node(head,1000);
print(head);
head=reverse(head);
print(head);
return 0;
}
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 使用 Vue 3.0,你可能不再需要Vuex了
- ffmpeg视频处理神器学习基础笔记
- 5分钟就能做一个Excel动态图表,你确定不学学?(纯gif教学)
- 使用Logstash接收Netflow日志并发送到syslog服务器
- Flask搭建ES搜索引擎(二)
- Java 通过RestHighLevelClient 使用ES的date_histogram 根据年月日做统计
- Debug HashMap
- NSum及股票系列
- 从0开始搭建编程框架——主框架和源码
- C++拾取——使用stl标准库生成等差、等比数列的方法
- C++拾取——使用stl标准库实现排序算法及评测
- 机器人实践课程镜像分享及使用说明(Arduino+ROS1+ROS2+Gazebo+SLAM+...)
- ROS 2 Foxy Fitzroy遇见Ubuntu 20.04
- ROS Noetic Ninjemys遇见Ubuntu 20.04
- Kustomize ConfigMapGenerate自动生成ConfigMap中的坑