单循环链表之带头结点
程序员文章站
2024-03-21 14:53:46
...
初始化
void listInit(LinkList &L)
{
L=new node;
L->next=L;
}
头插法
void CrateLink_H(LinkList &L)
{
LinkList p;
int n,m;
cout<<"please input a number:";
cin>>n;
for(int i=0;i<n;i++)
{
cin>>m;
p=new node;
p->data=m;
p->next=L->next;
L->next=p;
}
}
尾插法
void CreateLink_E(LinkList &L)
{
LinkList p;
LinkList r=L;
int n, m;
cout<<"please input a number:";
cin>>n;
for(int i=0;i<n;i++)
{
cin>>m;
p=new node;
p->data=m;
r->next=p;
r=p;
}
r->next=L;
}
链表长度
int ListLength(LinkList L)
{
LinkList p=L->next;
int count=0;
while(p!=L)
{
count++;
p=p->next;
}
return count;
}
添加新的结点
void ListInsert(LinkList &L,int i,int e,int n) //n表示链表的长度
{
LinkList p=L;
int j=0;
if(i%n==1)
{
LinkList s=new node;
s->data=e;
s->next=L->next;
L->next=s;
}
else
{
while(j<i-1)
{
if(p->next==L)
{
p=p->next;
}
p=p->next;
j++;
}
LinkList newnode=new node;
newnode->data=e;
newnode->next=p->next;
p->next=newnode;
}
}
删除结点
void Linkdelete(LinkList &L,int i) //i 表示要删除的位置
{
LinkList p=L;
int j=0;
while(j<i-1)
{
if(p->next==L)
{
p=p->next;
}
p=p->next;
j++;
}
LinkList q=p->next;
p->next=q->next;
delete(q);
}
遍历结点
void coutprint(LinkList &L)
{
LinkList p=L->next;
while(p!=L)
{
cout<<p->data<<" ";
p=p->next;
}
}
完整代码测试
#include<iostream>
#include<cstdio>
#include<cstdlib>
using namespace std;
typedef struct node
{
int data;
struct node *next;
}*LinkList;
void listInit(LinkList &L)
{
L=new node;
L->next=L;
}
void CrateLink_H(LinkList &L)
{
LinkList p;
int n,m;
cout<<"please input a number:";
cin>>n;
for(int i=0;i<n;i++)
{
cin>>m;
p=new node;
p->data=m;
p->next=L->next;
L->next=p;
}
}
void CreateLink_E(LinkList &L)
{
LinkList p;
LinkList r=L;
int n, m;
cout<<"please input a number:";
cin>>n;
for(int i=0;i<n;i++)
{
cin>>m;
p=new node;
p->data=m;
r->next=p;
r=p;
}
r->next=L;
}
int ListLength(LinkList L)
{
LinkList p=L->next;
int count=0;
while(p!=L)
{
count++;
p=p->next;
}
return count;
}
void ListInsert(LinkList &L,int i,int e,int n)
{
LinkList p=L;
int j=0;
if(i%n==1)
{
LinkList s=new node;
s->data=e;
s->next=L->next;
L->next=s;
}
else
{
while(j<i-1)
{
if(p->next==L)
{
p=p->next;
}
p=p->next;
j++;
}
LinkList newnode=new node;
newnode->data=e;
newnode->next=p->next;
p->next=newnode;
}
}
void Linkdelete(LinkList &L,int i)
{
LinkList p=L;
int j=0;
while(j<i-1)
{
p=p->next;
j++;
if(p->next==L)
{
p=p->next;
}
}
LinkList q=p->next;
p->next=q->next;
delete(q);
}
void coutprint(LinkList &L)
{
LinkList p=L->next;
while(p!=L)
{
cout<<p->data<<" ";
p=p->next;
}
}
int main(void)
{
LinkList L;
LinkList L1;
listInit(L);
CrateLink_H(L);
coutprint(L);
cout<<endl;
listInit(L1);
CreateLink_E(L1);
int n=ListLength(L1);
ListInsert(L1,9,90,n);
coutprint(L1);
cout<<endl;
Linkdelete(L1,4);
coutprint(L1);
}
上一篇: 关于java中实现word转pdf
下一篇: 全排列生成及子集生成的递归算法