单向链表
程序员文章站
2022-05-22 19:55:10
...
单向链表
- 相关函数代码整理笔记
code
#include<iostream>
#include<cstdlib>
using namespace std;
typedef struct LNode{
int data;
struct LNode *next;
}LNode,*LinkList;
void CreateLink(LinkList &l,int n)
{
l=new LNode[n+1];
l[0].data=0;
l[0].next=l+1;
for(int i=1;i<=n;i++){
cin>>l[i].data;
if(i<n)
l[i].next=l+i+1;
}
l[n].next=NULL;
}
void PrintLink(LinkList &l)
{
LinkList p=l->next;
while(p){
cout<<(p->data)<<' ';
p=p->next;
}
cout<<"\b"<<endl;
}
void InitLink(LinkList &l,int n)
{
l=(LinkList)malloc(sizeof(LNode)*(n+1));
l->data=0;
l[0].next=l+1;
for(int i=1;i<=n;i++){
cin>>((l+i)->data);
l[i].next=l+i+1;
}
l[n].next=NULL;
}
void GetElem(LinkList &l,int k,int &e)
{
e=-1;
LinkList p=l->next;
int j=1;
while(p && j<k){
p=p->next;
j++;
}
if(!p || j>k){
cout<<"ERROR!"<<endl;
return ;
}
e=p->data;
}
void InsertLink(LinkList &l,int k,int e)
{
LinkList p;
p=new LNode;
p->data=e;
p->next=(l+k-1)->next;
(l+k-1)->next=p;
}
void DelLink(LinkList &l,int k)
{
(l+k-1)->next=(l+k)->next;
delete (l+k);
}
void MergeLink(LinkList &l1,LinkList &l2,LinkList &l3)
{
l3=new LNode;
LinkList p=l1->next,q=l2->next,t;
t=l3;
while(p && q){
if((p->data)<(q->data)){
t->next=p;
t=t->next;
p=p->next;
}
else{
t->next=q;
t=t->next;
q=q->next;
}
}
t->next=(p?p:q);
return ;
}