使用指针域进行初始化单链表的两种方式
1.头插法进行初始化(详情见代码注释)
#include <iostream>
#include <stdlib.h>
using namespace std;
typedef struct LNode{
int data;
struct LNode *next;
}LNode,*LinkList;
LinkList initLinkList(LinkList &L){
LNode *s;
L = (LinkList)malloc(sizeof(LNode));
L->next = NULL;
int value;
cin>>value;
while(value!=-1){
s = (LinkList)malloc(sizeof(LNode));
s->data = value;
s->next = L->next;
L->next = s;
cin>>value;
}
return L;
}
int main(){
LinkList L;
initLinkList(L);
return 0;
}
2.尾插法进行初始化(详情见代码注释)
LinkList initLinkList2(LinkList &L){
int value;
L = (LinkList)malloc(sizeof(LNode));
LNode *s , *r = L;
cin>>value;
while(value!=-1){
s = (LNode *)malloc(sizeof(LNode));
s->data = value;
r->next=s;
r=s;
cin>>value;
}
r->next = NULL;
return L;
}
单链表的操作
1.按照序号查找结点值
LNode *GetElem(LinkList L,int i ){
int j=1;
LNode *p = L->next;
if(i==0){
return L;
}
if(i<1){
return NULL;
}
while(p&&j<i){
p=p->next;
j++;
}
return p;
}
2.按照值查找结点
LNode *locateElem (LinkList L,int e){
LNode *p = L->next;
while(p->data!=e && p!=NULL)
p=p->next;
return p;
}
3.插入结点操作
LNode *InsertElem(LinkList L,int e,int i){
LNode *p = GetElem(L,i-1);
LNode *s = (LinkList)malloc(sizeof(LNode));
s->data = e;
s->next = p->next;
p->next = s;
cout<<"插入成功"<<endl;
}
4.删除结点操作
LNode *DelElem(LinkList L,int i){
LNode *p = GetElem(L,i-1);
LNode *q = p->next;
p->next = q->next;
free(q);
}
所有代码及测试
#include <iostream>
#include <stdlib.h>
using namespace std;
typedef struct LNode{
int data;
struct LNode *next;
}LNode,*LinkList;
LinkList initLinkList(LinkList &L){
LNode *s;
L = (LinkList)malloc(sizeof(LNode));
L->next = NULL;
int value;
cin>>value;
while(value!=-1){
s = (LinkList)malloc(sizeof(LNode));
s->data = value;
s->next = L->next;
L->next = s;
cin>>value;
}
return L;
}
LinkList initLinkList2(LinkList &L){
int value;
L = (LinkList)malloc(sizeof(LNode));
LNode *s , *r = L;
cin>>value;
while(value!=-1){
s = (LNode *)malloc(sizeof(LNode));
s->data = value;
r->next=s;
r=s;
cin>>value;
}
r->next = NULL;
return L;
}
LNode *GetElem(LinkList L,int i ){
int j=1;
LNode *p = L->next;
if(i==0){
return L;
}
if(i<1){
return NULL;
}
while(p&&j<i){
p=p->next;
j++;
}
return p;
}
LNode *locateElem (LinkList L,int e){
LNode *p = L->next;
while(p->data!=e && p!=NULL)
p=p->next;
return p;
}
LNode *InsertElem(LinkList L,int e,int i){
LNode *p = GetElem(L,i-1);
LNode *s = (LinkList)malloc(sizeof(LNode));
s->data = e;
s->next = p->next;
p->next = s;
cout<<"插入成功"<<endl;
}
LNode *DelElem(LinkList L,int i){
LNode *p = GetElem(L,i-1);
LNode *q = p->next;
p->next = q->next;
free(q);
}
int main(){
LinkList L;
initLinkList2(L);
LNode *p = GetElem(L,2);
cout<<p->data<<endl;
LNode *l = locateElem(L,2);
cout<<l<<endl;
cout<<l->data<<endl;
InsertElem(L,2,2);
DelElem(L,2);
return 0;
}