链表逆序
来源:互联网 发布:淘宝店企业店铺流程 编辑:程序博客网 时间:2024/04/29 21:50
bh单链表逆序详解
1、具有链表头的单链表
一段单链表逆序的程序
typedef struct student
{
int number;
char name[20];
int score;
struct student*next;
}student;
student *reverse(student *stu)
{
student *p1,*p2,*p3;
if(stu == NULL||stu->next == NULL)
return stu;
p1=stu->next; //p1指向链表头节点的下一个节点
p2=p1->next;
p1->next=NULL;
while(p2)
{
p3=p2->next;
p2->next = p1;
p1=p2;
p2=p3;
}
printf("p1 =%d,next = %d\n ",p1->number,p1->next->number);
stu->next=p1; //将链表头节点指向p1
return stu;
}
分析:
假设需要逆序的单链表为:
则逆序以后的链表为:
过程:
(1)取p1指向header->next p1=stu->next;
p2保留p1->next p2=p1->next;
将p1->next置为NULL,因为单链表逆序以后,当前的p1节点为尾节点 p1->next=NULL;
(2)取p3保留p2->next p3=p2->next;
将p2插入p1之前 p2->next = p1;
p1指向p2指向的节点 p1=p2;
p2指向p3指向的节点 p2=p3;
循环一次修改以后的单链表如下:
(3)重复步骤(2)
循环一次修改以后的单链表如下:
(4)将header->next指向p1,完成整个单链表的逆序
2、无链表头的单链表
一段单链表逆序的程序
typedef struct student
{
int number;
char name[20];
int score;
struct student*next;
}student;
student *reverse2(student *stu)
{
student *p1,*p2,*p3;
if(stu == NULL ||stu->next == NULL)
return stu;
p1=stu; //p1指向链表的第一个节点
p2=p1->next;
p1->next = NULL;
while(p2)
{
p3=p2->next;
p2->next = p1;
p1=p2;
p2=p3;
}
printf("p1 = %d,next = %d\n ",p1->number,p1->next->number);
stu=p1; //将链表第一个节点指向p1
return stu;
}
- 链表的逆序
- 链表逆序
- 链表逆序
- 链表逆序小结
- 逆序链表
- 链表逆序 :华硕
- 链表逆序
- 链表逆序
- 链表逆序
- 链表逆序
- 实现链表逆序
- 链表逆序
- 链表逆序
- 链表逆序
- 链表逆序
- 链表逆序
- 链表逆序
- 链表逆序
- MVC开发模式
- 自定义标签jstl2.0以后的用法
- 数据类型的强制转换
- 打印流(PrintStream)
- mina接收数据的封包
- 链表逆序
- 1721. Gray code[Special judge]
- 上海南京路苹果零售店即将开业(图),3JI9
- 用户表单注册
- C# 如何查看源程序的IL代码
- Hadoop权威指南学习(五)——MapReduce的类型和格式
- 泛型简介
- 数据类型的转换
- 数字转换大写中文