单向链表逆序
2015-11-30 22:55
148 查看
先上三幅图:原始状态是图一,全部逆序之后是图三的样子,图二是逆序一步之后的样子。按照图二的步骤依次往后,每次移动一步,把p1->next 反向,直到全部逆序。详细原理请看代码。
图一:
图二:
图三:
[cpp] view
plaincopyprint?
typedef struct Node Node;
struct Node{
int data;
Node* next;
};
Node* reverseLinkList(Node* head){
if (head==NULL||head->next==NULL) {
return head;
}
Node* p1 = head;
Node* p2 = p1->next;
Node* p3 = p2->next;
p1->next = NULL;//p1要变成尾指针,所以指向NULL
while (p3!=NULL) {
p2->next = p1;//p2->next 反向
p1=p2;//p1指针向后移动一步
p2=p3;//p2指针向后移动一步
p3=p3->next;//p3指针向后移动一步
}
p2->next=p1;//p3指向了NULL,p2反向
head=p2;//头指针指向之前的尾指针
return head;
}
至此结束了。
图一:
图二:
图三:
[cpp] view
plaincopyprint?
typedef struct Node Node;
struct Node{
int data;
Node* next;
};
Node* reverseLinkList(Node* head){
if (head==NULL||head->next==NULL) {
return head;
}
Node* p1 = head;
Node* p2 = p1->next;
Node* p3 = p2->next;
p1->next = NULL;//p1要变成尾指针,所以指向NULL
while (p3!=NULL) {
p2->next = p1;//p2->next 反向
p1=p2;//p1指针向后移动一步
p2=p3;//p2指针向后移动一步
p3=p3->next;//p3指针向后移动一步
}
p2->next=p1;//p3指向了NULL,p2反向
head=p2;//头指针指向之前的尾指针
return head;
}
至此结束了。
相关文章推荐
- mysql中数据类型
- android 之 EditText 取消默认焦点的两种方式
- android的适配
- linux cp操作,每天学习一点
- nginx日志定时切割脚本
- 小学四则运算APP 第二次冲刺-第二天
- 缩减项目规模,针对性练习
- 十条常用nmap命令行格式
- 二分查找
- UESTC 1014 The King and King boss 鸽巢原理
- 黑马程序员——Java基础 ---反射
- hdu-5568SUM (dp)
- Quartz Core 图层编程
- iPhone自动旋转控制代码-IOS开发
- java习题
- 工程中导入sqlite -sqlite 基础教程(1)
- WebKit之JSCell的继承关系图
- sqlite 句柄-sqlite 基础教程(3)
- Ubuntu下搭建Qt+OpenCV开发环境
- POJ2503 哈希(字符串编码)