# 数据结构链表的创建插入删除操作

``````
#define _CRT_SECURE_NO_WARNINGS
#define ERROR 0
#define OK 1
#include <iostream>
using namespace std;
typedef int Status;
typedef int Elemtype;
typedef struct Lnode//定义链表
{
Elemtype data;
struct Lnode *next;
{
L = new Lnode;//用new为L动态分配空间，空间中有data，*next
L->next = NULL;
cout << "\t\t初始化成功！" << endl;
return OK;
}
{//尾插法
int n;
Lnode *p,*r;//生成结点p和尾指针r
r = L;
cout << "输入元素个数：";
cin >> n;
cout << "请输入元素：";
for (int i = 1; i <= n; i++)
{
p = new Lnode;//为p分配空间
cin >> p->data;
p->next = NULL;
r->next=p;//r->next本来是NULL，现在把p赋给r->next
r = p;//r是尾指针，要一直指向尾部
}
cout << "初始化创建成功！" << endl;
return OK;
/* 前插法
int n;
cout << "输入元素个数：";
cin >> n;
cout << "请输入元素：";
for (int i = 1; i <= n; i++)
{
p = new Lnode;//为p分配空间
cin >> p->data;
p->next=L->next;
L->next = p;
}*/
}
{
Lnode* tmp = L->next;//!!!
while (tmp != NULL)
{
cout << tmp->data<<" ";
tmp = tmp->next;
}
cout << endl;
}
{//在第n个元素前插入
int n,i=1;
Lnode* tmp = L;
cout << "请输入插入的位置：";
cin >> n;
//while (tmp->next != NULL && i < n)
while (tmp && i < n)
{
tmp = tmp->next;
i++;
}//跳出循环时tmp指向n的前一个
//if (tmp->next == NULL)
if(tmp==NULL){ cout << "位置非法，插入失败！" << endl; return ERROR; }
Lnode* p;//生成新节点
p = new Lnode;//分配空间
cout << "输入要插入的数字：";
cin >> p->data;
p->next=tmp->next;
tmp->next=p;
cout << "插入成功!" << endl;
Output(L);
return OK;
}
{
int n,i=1;
Lnode* tmp=L;
cout << "请输入要获取的元素的位置：";
cin >> n;
//while (tmp->next != NULL && i < n)//可以循环，判断i==n时直接输出
while (tmp && i < n)
{//终止条件是tmp->next为空 或者 i==n
tmp=tmp->next;
i++;
}
if (tmp == NULL) { cout << "位置非法，插入失败！" << endl; return ERROR; }
cout << i <<"号位置的元素为" << tmp->data << endl;//此时i==n，直接输出
cout << "获取元素成功!" << endl;
return OK;
}
{
int elem,flag=0,i=1;
Lnode* tmp=L;
cout << "请输入要查询的元素：";
cin >> elem;
//while (tmp->next != NULL)
while (tmp)
{
if (tmp->data == elem){
cout << "该元素的位置为" << i << endl;
cout << "查找成功！"<<endl;
flag = 1;
return OK;}
tmp = tmp->next;
i++;
}
if (flag == 0)cout << "查询失败" << endl;
}
{
Lnode* p = L;
cout << "请输入删除的元素的位置：";
int x;
cin >> x;
int i = 1;
while (p->next != NULL && i < x )// || ?
{
p = p->next;
i++;
}
if (p->next == NULL) { cout << "位置非法,删除失败！" << endl; return ERROR; }
Lnode* tmp;//临时存放,以备删除
tmp=p->next;
p->next=tmp->next;
delete tmp;
cout << "删除成功!" << endl;
Output(L);
return OK;
}
{
printf("---------------------------------------\n");
printf("\t1.清屏\t2.创建\t3.输出\n");
printf("\t4.插入\t5.删除\t6.取值\n");
printf("\t7.查找\t0.退出\n");
printf("---------------------------------------\n");
int select;
while(1)
{
cout << "请输入选项：";
cin >> select;
switch (select)
{
case 1:system("cls");    break;
case 2:Createlist(L);    break;
case 3:Output(L);        break;
case 4:Insert(L);        break;
case 5:Del(L);            break;
case 6:Getelem(L);        break;
case 7:Search(L);        break;
case 0:exit(1);            break;
default:cout << "请重新输入！" << endl;
}
}

}
int main()
{
Init(L);//初始化  将头指针传入初始化函数初始化
return 0;
}
``````

• 写回答

#### 2条回答默认 最新

• threenewbee 2023-03-12 13:43
关注

调试下第一个元素的指针指向了哪里

本回答被题主选为最佳回答 , 对您是否有帮助呢?
评论

• 系统已结题 3月27日
• 已采纳回答 3月19日
• 创建了问题 3月12日

#### 悬赏问题

• ¥15 spss统计中二分类变量和有序变量的相关性分析可以用kendall相关分析吗？
• ¥15 拟通过pc下指令到安卓系统，如果追求响应速度，尽可能无延迟，是不是用安卓模拟器会优于实体的安卓手机？如果是，可以快多少毫秒？
• ¥20 神经网络Sequential name=sequential, built=False
• ¥16 Qphython 用xlrd读取excel报错
• ¥15 单片机学习顺序问题！！
• ¥15 ikuai客户端多拨vpn，重启总是有个别重拨不上
• ¥20 关于#anlogic#sdram#的问题，如何解决？(关键词-performance)
• ¥15 相敏解调 matlab
• ¥15 求lingo代码和思路
• ¥15 公交车和无人机协同运输