早教吧 育儿知识 作业答案 考试题库 百科 知识分享

两题单链表逆置,求讲解1.p=head->next;head->next=NULL;while(p){s=p;p=p->next;s->next=head->next;head->=s;}p=head-next;2.p=head->next;q=p->next;p->next=NULL;while(q!=NULL){r=q->next;q->next=p;p=q;q=r;}head->next=p;本人初学数据结构,

题目详情
两题单链表逆置,求讲解
1.p=head->next;
head->next=NULL;
while(p)
{s=p;
p=p->next;
s->next=head->next;
head->=s;
}
p=head-next;
2.p=head->next;
q=p->next;
p->next=NULL;
while(q!=NULL)
{
r=q->next;
q->next=p;
p=q;
q=r;
}
head->next=p;
本人初学数据结构,看不懂这两个链表是如何逆置,
▼优质解答
答案和解析
第一个,有头结点的单链表,从头到尾顺次摘下所有结点并插入在表头:
p=head->next; p指向第一个结点
head->next=NULL; 断开头结点和链表
while(p)当链表不为空时
{s=p;中间指针保存当前结点好摘下
p=p->next;当前指针后移
s->next=head->next;将摘下的结点
head->=s;表头插入
}
第二个,有头结点单链表,至少一个数据结点,与前面的相似,只是处理方法为每摘下一个结点,将其后继域指向当前第一个结点
p=head->next; 第一个结点
q=p->next;第二个结点
p->next=NULL;断开链表
while(q!=NULL)待摘结点链表不为空
{
r=q->next;中间指针指向待摘结点表头的后继
q->next=p;当前摘下结点指向第一个结点
p=q;第一个结点移到刚插入的结点
q=r;待摘结点指针后移
}
head->next=p;将表头结点和第一个结点链接起来