单链表for()循环的两种初始化:
1. for(Node *p=plist; p->next !=NULL; p=p->next)
//进行插入,删除操作,对链表进行修改
2. for(Node *p=plist->next; p !=NULL; p=p->next)
//不对链表进行修改
单链表常考:
单链表插入的两种方法:
//头插
bool Insert_head(List plist,int val)
{
Node *p=(Node*)malloc(sizeof(Node));
p->data=val;
assert(p != NULL);
if(p==NULL)
return false;
p->next=plist->next;
plist->next=p;
return true;
}//尾插
bool Insert_tail(List plist,int val)
{
Node *p=(Node*)malloc(sizeof(Node));
p->data=val;
assert(p != NULL);
if(p==NULL)
return false;
Node *q=plist;
while(q->next != NULL) //找尾巴
{
q=q->next;
}
//给q后面插p
p->next=q->next;
q->next=p;
return true;
}
销毁单链表:
//销毁链表
void Destory(List plist)
{
//*****************************************way1************************************//
//每次都删头结点之后的结点,当plist->next!=NULL,说明还有还有结点没有处理
Node *p;
while(plist->next !=NULL)
{
p=plist->next;
plist->next=p->next;
free(p);
}
//**************************************way2***************************************//
//从第一个数据域开始一个一个删
/*Node *p=plist->next;
Node *q;
while(p != NULL)
{
q=p->next;
free(p);
p=q;
}
plist->next=NULL;*/ //头结点制空
}
单链表逆置:
//逆置
void Reverse(List plist)
{
//指针为空退出,只有一个头结点退出,只有一个数据结点退出,不需逆置
if(plist == NULL || plist->next==NULL || plist->next->next==NULL)
return ;
//***************************************way1***********************************//
//利用头插法实现逆置
//按原来结点的顺序利用头插法再插入链表
//时间复杂度O(n),最好
Node *p=plist->next;
Node *q;
plist->next=NULL;
while(p !=NULL)
{
q=p->next;
p->next=plist->next;
plist->next=p; p=q;
}
//**************************************way2*******************************//
//结点不动,第一个结点的数据域与最后一个结点的数据域的值交换,
//第二个结点的数据域与倒数第二个结点的数据域交换,以此类推
//时间复杂度O(n^2)
/*Node *p=plist->next;
Node *q;
for(q=plist;q->next !=NULL;q=q->next);
for(int i=0;i<GetLength(plist)/2;i++)
{
int tmp;
tmp=p->data;
p->data=q->data;
q->data=tmp;
p=p->next;
q=GetPri(plist,q);//q的前驱赋给q
}*/
//*****************************************way3******************************//
//改变指针的指向,后->前,头指针指向最后一个结点 //时间复杂的O(n)
/*Node *p=plist->next;
Node *q=p->next;
Node *s;
p->next=NULL;
while(q !=NULL)
{
s=q->next;
q->next=p;
p=q;
q=s;
}
plist->next=p;*/
}
版权声明:本文为qq_40395404原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。