带头结点的链表定义
typedef struct LNode{
int data;
struct LNode *next;
} LNode,*LinkList;
初始化
bool InitList(LinkList &L)
{
L=new LNode ;
if(L==NULL)
{
return false;
}
L->next=NULL;
return true;
}
插入操作
bool listInsert(LinkList &L,int i,int e)
{
if(i<1)
{
return false;
}
int j=0;
LNode *p;
p=L;
while(p!=NULL&&j<i-1)
{
p=p->next;
j++;
}
LNode *s = new LNode;
s->data=e;
s->next=p->next;
p->next=s;
return true;
}
指定结点的前插操作
删除操作
bool insertPriorNode(LNode *p,int e)
{
if(p== nullptr)
{
return false;
}
LNode *s = new LNode;
s->next=p->next;
p->next=s;
s->data=p->data;
p->data=e;
return true;
}
bool listDelete(LinkList &L,int i,int &e)
{
if(i<1)
{
return false;
}
LNode *p;
int j=0;
p=L;
if(p==NULL)
{
return false;
}
if(p->next==NULL)
{
return false;
}
while(p!=NULL&&j<i-1)
{
p=p->next;
j++;
}
LNode *q=p->next;
e=q->data;
p->next=q->next;
free(q);
return true;
}
删除特定结点
bool deleteNode(LNode *p,int i,int &e)
{
if(i<1)
{
return false;
}
LNode *q=p->next;
p->data=p->next->data;
p->next=q->next;
free(q);
return true;
}
尾插法建立单链表
LinkList List_tailInsert(LinkList &L)
{
int x;
L=new LNode ;
L->next=NULL;
LNode *s,*r=L;
cin>>x;
while(x!=-1)
{
s=new LNode ;
s->data=x;
r->next=s;
r=s;
cin>>x;
}
r->next= nullptr;
return L;
}
头插法建立单链表
LinkList List_headInsert(LinkList &L)
{
int x;
L=new LNode ;
L->next= nullptr;
LNode *s;
cin>>x;
while(x!=-1)
{
s=new LNode ;
s->data=x;
s->next=L->next;
L->next=s;
cin>>x;
}
return L;
}
完整代码
//
// Created by 12231 on 2022/7/14.
//
#include <iostream>
using namespace std;
typedef struct LNode{
int data;
struct LNode *next;
} LNode,*LinkList;
bool InitList(LinkList &L)
{
L=new LNode ;
if(L==NULL)
{
return false;
}
L->next=NULL;
return true;
}
bool listInsert(LinkList &L,int i,int e)
{
if(i<1)
{
return false;
}
//不带头结点
// if(i==1)
// {
// LNode *s=new LNode;
// s->data=e;
// s->next=L;
// L=s;
// }
int j=0;
LNode *p;
p=L;
while(p!=NULL&&j<i-1)
{
p=p->next;
j++;
}
LNode *s = new LNode;
s->data=e;
s->next=p->next;
p->next=s;
return true;
}
//前插操作 在p结点前插入元素
bool insertPriorNode(LNode *p,int e)
{
if(p== nullptr)
{
return false;
}
LNode *s = new LNode;
s->next=p->next;
p->next=s;
s->data=p->data;
p->data=e;
return true;
}
bool listDelete(LinkList &L,int i,int &e)
{
if(i<1)
{
return false;
}
LNode *p;
int j=0;
p=L;
if(p==NULL)
{
return false;
}
if(p->next==NULL)
{
return false;
}
while(p!=NULL&&j<i-1)
{
p=p->next;
j++;
}
LNode *q=p->next;
e=q->data;
p->next=q->next;
free(q);
return true;
}
//删除指定结点
bool deleteNode(LNode *p)
{
LNode *q=p->next;
p->data=p->next->data;
p->next=q->next;
free(q);
return true;
}
LNode *GetElem(LinkList L,int i)
{
if(i<0)
{
return nullptr;
}
LNode *p;
int j=0;
p=L;
while(p!=nullptr&&j<i)
{
p=p->next;
j++;
}
return p;
}
LinkList List_tailInsert(LinkList &L)
{
int x;
L=new LNode ;
L->next=NULL;
LNode *s,*r=L;
cin>>x;
while(x!=-1)
{
s=new LNode ;
s->data=x;
r->next=s;
r=s;
cin>>x;
}
r->next= nullptr;
return L;
}
LinkList List_headInsert(LinkList &L)
{
int x;
L=new LNode ;
L->next= nullptr;
LNode *s;
cin>>x;
while(x!=-1)
{
s=new LNode ;
s->data=x;
s->next=L->next;
L->next=s;
cin>>x;
}
return L;
}
void printList(LinkList L)
{
LNode *p=L->next;
while (p!= nullptr)
{
cout<<p->data<<" ";
p=p->next;
}
}
int main()
{
LinkList L;
int e;
List_tailInsert(L);
listDelete(L,3,e);
// List_headInsert(L);
// cout<<"第2个结点上的元素为"<<GetElem(L,2)->data<<" ";
printList(L);
}