6.带头结点的单链表操作
Posted upupup-999
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了6.带头结点的单链表操作相关的知识,希望对你有一定的参考价值。
#include<stdio.h>
#include<stdlib.h>
typedef int ElemType;
typedef struct LNode{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
bool InitList(LinkList &L){
L=(LNode*)malloc(sizeof(LNode));
if(L==NULL)
{
return false;
}
L->next=NULL;
return true;
}
bool Empty(LinkList L)
{
if(L->next==NULL)
{
return true;
}
else
return false;
}
//在第i个位置插入
bool ListInsert(LinkList &L,int i,ElemType e)
{
if(i<1)
return false;
LNode *p;
int j=0;//p指向第几个节点
p=L;
while(p!=NULL&&j<i-1)
{
p=p->next;
j++;
}
if(p==NULL)//i值不合法
{
return false;
}
LNode* s=(LNode*)malloc(sizeof(LNode)) ;
s->data=e;
s->next=p->next;
p->next=s;
return true;
//可以直接调用 InsertNextNode方法
}
//在p节点后插入
bool InsertNextNode(LNode *p,ElemType e)
{
if(p==NULL)
return false;
LNode* s=(LNode*)malloc(sizeof(LNode)) ;
if(s==NULL)
return false;
s->data=e;
s->next=p->next;
p->next=s;
return true;
}
//在p节点前插入(节点前未知,可以换位置)
bool InsertPriorNode(LNode *p,ElemType e)
{
if(p==NULL)
return false;
LNode* s=(LNode*)malloc(sizeof(LNode)) ;
if(s==NULL)
return false;
s->next=p->next;
p->next=s;
s->data=p->data;
p->data=e;
return true;
}
bool ListDelete(LinkList &L,int i,ElemType &e)
{
if(i<1)
return false;
int j=0;
LNode *p;
p=L;
while(p!=NULL&&j<i-1)
{
p=p->next;
j++;
}
if(p==NULL)
return false;
if(p->next==NULL)
return false;
LNode *q;
q=p->next;
e=q->data;
p->next=q->next;
free(q);
return true;
}
//删除指定节点
bool DeleteNode(LNode *p){
if(p==NULL)
return false;
LNode *q=p->next;
p->data=p->next->data;//把p后面的节点删除了
p->next=q->next;
free(q);
return true;
}
int main(){
LinkList L;
bool a=InitList(L);
bool b=Empty(L);
bool c=ListInsert(L,1,3);
int f;
bool d=ListDelete(L,1,f);
printf("a=%d\\n",a);
printf("b=%d\\n",b);
printf("c=%d\\n",c);
printf("f=%d\\n",f);
return 0;
}
以上是关于6.带头结点的单链表操作的主要内容,如果未能解决你的问题,请参考以下文章