单链表的查找、插入与删除结点
1.单链表查找结点:
①.按序号查找结点值: 【单链表的查找、插入与删除结点】什么都不说了,课本上的代码yyds,本来觉得课本上的代码不够完整,自己写着写着就越发觉得课本上的代码极其精妙。
LNode* Get(LinkList L, int i) {//按序号查找结点值
int j = 1;
//初始为1
LNode* p = L->next;
if (i < 0) {//无效返回空
return NULL;
}
else if (i == 0) {
return L;
}
while (p && j < i) {//查找,若i大于表长,返回null
p = p->next;
j++;
}
return p;
}
②.按值查找表结点:
LNode* LocateElem(LinkList L,int e) {//按值查找表结点int j = 1;
LNode* p = L->next;
while (p != NULL && p->data != e) {
p = p->next;
j++;
}
return p;
}
2.插入结点操作:
void insert(LNode *s,int i) {//在序号i处插入结点sLNode* p = new LNode;
p = Get(L, i-1);
s->next = p->next;
p->next = s;
}
3.删除结点操作:
void Delete(int i) {//删除第i个结点LNode* p = new LNode;
p = Get(L, i - 1);
LNode* q = new LNode;
q = p->next;
p->next = q->next;
free(q);
}
4.运行截图:
文章图片
5.完整代码:
#include
using namespace std;
typedef struct LNode {
int data;
struct LNode* next;
}LNode, * LinkList;
LinkList L = new LNode;
LinkList List_TailInsert(LinkList& L) {//尾插法L = new LNode;
LNode* s, * r = L;
int x = 1;
while (x != 10) {//插入数字1~9
s = new LNode;
s->data = https://www.it610.com/article/x;
r->next = s;
r = s;
x++;
}
r->next = NULL;
return L;
}void printk(LinkList& L) {//输出单链表LinkList q;
q = L->next;
while (q) {
cout << q->data << " ";
q = q->next;
}
cout << endl;
}LNode* Get(LinkList L, int i) {//按序号查找结点值
int j = 1;
//初始为1
LNode* p = L->next;
if (i < 0) {//无效返回空
return NULL;
}
else if (i == 0) {
return L;
}
while (p && j < i) {//查找,若i大于表长,返回null
p = p->next;
j++;
}
return p;
}LNode* LocateElem(LinkList L,int e) {//按值查找表结点int j = 1;
LNode* p = L->next;
while (p != NULL && p->data != e) {
p = p->next;
j++;
}
if (!p) {
cout << "没有找到值为e的结点!" << endl;
}
else cout << "数值为"<next = p->next;
p->next = s;
cout << "在第"<next;
p->next = q->next;
free(q);
cout << "删除第" << i << "个结点后的输出如下:" << endl;
printk(L);
}int main() {L = List_TailInsert(L);
cout << "新建单链表输出如下:" << endl;
printk(L);
cout << "第三个结点数据元素为:" << Get(L,3)->data << endl;
//查找序号为3结点的元素值LNode* p = new LNode;
p = LocateElem(L, 3);
//按元素值查找结点序号LNode* s = new LNode;
s->data = https://www.it610.com/article/10;
insert(s, 3);
//在序号i处插入结点sDelete(3);
//删除第i个结点return 0;
}
推荐阅读
- 数据结构与算法的基本概念
- 线性表的相关概念
- 服务/软件管理(10---Linux的网卡(ethtool命令))
- Linux中的计划任务—Crontab调度重复执行的任务
- #yyds干货盘点# Java 基础 - 面向对象的三大特性
- 微软用户:把Win10默认浏览器换成谷歌的
- 盗版系统升级win10后黑屏的处理办法
- Win10自定义高级共享设置的办法
- 聊聊保证线程安全的10个小技巧
- 一种基于生成对抗网络的无人机图像去雾算法