我最近在学习数据结构,自己写了一些初级的链表代码,方便链表的初学者。
#include <stdlib.h>
#include <iostream>
using namespace std;
typedef struct LNode{
int data;
struct LNode *next;
}LNode, *LinkList;
//头插法建立单链表(带头结点)
LinkList LinkList_HeaderInsert(LinkList &L){
L = (LinkList)malloc(sizeof(LNode));
LNode *s;
int num;
cout << "输入要插入的元素,以999结束:" << endl;
cin >> num;
L->next = NULL;
while(num != 999){
s = (LNode *)malloc(sizeof(LNode));
s->data = num;
s->next = L->next;
L->next = s;
cin >> num;
}
return L;
}
//尾插法建立单链表(带头结点)
LinkList LinkList_TailInsert(LinkList &L){
cout << "以尾插法建立单链表,输入要添加的数字,以999结束:" << endl;
int num;
L = (LinkList)malloc(sizeof(LNode));
LNode *s;
LNode *r = L;
cin >> num;
while(num != 999){
s = (LNode *)malloc(sizeof(LNode));
s->data = num;
r->next = s;
r = s;
cin >> num;
}
r->next = NULL;
return L;
}
//打印链表中的data
void LinkList_Print(LinkList L){
cout << "链表中的数据为:" << endl;
while(L->next != NULL){
cout << L->next->data << " ";
L = L->next;
}
cout << endl;
}
//获取链表的长度
int LinkList_Length(LinkList L){
int i = 0;
while(L->next){
L=L->next;
i++;
}
cout << "链表的长度为:" << i << endl;
return i;
}
//按序号查找节点
LNode *GetElem(LinkList L,int num){
int i = 0;
if(num == 0){
return L;
} else if(num < 0){
return NULL;
}
while(i < num && L->next){
L = L->next;
i++;
}
return L;
}
//按值查找节点值
LNode *LocateElem(LinkList L,int num){
while(L->next->data != num){
L = L->next;
}
return L->next;
}
//插入节点
LinkList LinkList_Insert(LinkList &L, int num, int index){
LNode *p = GetElem(L, index-1);
LNode *s = (LinkList)malloc(sizeof(LNode));
s->data = num;
s->next = p->next;
p->next = s;
LinkList_Print(L);
return L;
}
//删除节点
LinkList LinkList_Delete(LinkList &L, int index){
LNode *p = GetElem(L, index-1);
LNode *t = p->next;
p->next=t->next;
free(t);
LinkList_Print(L);
return L;
}
int main(){
LinkList L;
//头插法建立单链表(带头结点)
//LinkList_HeaderInsert(L);
//尾插法建立单链表(带头结点)
LinkList_TailInsert(L);
//打印链表中每个节点的data
LinkList_Print(L);
//获取链表的长度
int length = LinkList_Length(L);
//按序号查找节点
int num;
int index;
cout << "输入要查找节点的序号:" << endl;
cin >> num;
LNode *p = GetElem(L, num);
cout << "该元素的data为:" << p->data << "该元素的next为:" << p->next << endl;
//按值查找节点值
cout << "输入要查找节点的值:" << endl;
cin >> num;
p = LocateElem(L,num);
cout << "该元素的data为:" << p->data << "该元素的next为:" << p->next <<endl;
//插入节点
cout << "输入要插入节点的值:" << endl;
cin >> num;
cout << "输入要插入节点的位置:" << endl;
cin >> index;
LinkList_Insert(L, num, index);
//删除节点
cout << "输入要删除节点的位置:" << endl;
cin >> index;
LinkList_Delete(L, index);
return 0;
}
如果我的代码对你有帮助,记得点赞+收藏哦!