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.带头结点的单链表操作的主要内容,如果未能解决你的问题,请参考以下文章

什么叫带头结点的链表? 什么叫不带头结点的链表?

数据结构第三章:不带头结点的单链表操作

数据结构不带头结点非循环的单链表

链表的学习-2

每天进步一点点之带头节点单链表

6.带头结点的单链表操作