链表插入,反转
作者:互联网
bool InsertOFPos(SingleList *head,ElemType val,int pos)//按位置插入
{
if(head==NULL) exit(0);
if(pos<0) return false;
SingleList *p=head;
while(pos&&p!=NULL)
{
pos--;
p=p->next;
}
if(p==NULL)
return false;
SingleList *newNode=ApplyNode(val,p->next);
if(newNode==NULL)
return false;
p->next=newNode;
return true;
}
//链表反转
void Resever(SingleList *head)
{
if(head==NULL
||head->next==NULL
||head->next->next==NULL) exit(0);//为空或只有一个节点时
//使用两个指针
//就地逆转
SingleList *p=head->next;//逆转的节点
SingleList *q=p->next;//记录逆转节点的下一个
head->next = NULL;//头结点后置为空
while (p!= NULL)
{
//将p插入到头结点和头结点的下一个中间
p->next=head->next;
head->next=p;
//逆转节点往后挪
p=q;
if(q!=NULL)
{
q=q->next;
}
}
ShowList(head);
/*
//使用三个指针
SingleList *s=NULL;
SingleList *p = head->next;
SingleList *q = p->next;
while(p!= NULL)
{
p->next=s;
s=p;
p=q;
if(q!=NULL)
{
q=q->next;
}
}
head->next=s;
*/
}
标签:head,反转,pos,next,链表,插入,SingleList,NULL,节点 来源: https://blog.csdn.net/lbb20/article/details/120257761