链表如何逆序
2013-11-05 15:43
183 查看
很久没有重温数据结构了,大学时期不够努力阿,有些经典的算法没有掌握,这里补充一下。
1、逆序问题用三个字解决:前插法
L->1->2->3->4->5->NULL //L为原表
p = L;
L = NULL;
---------------------
L->1->NULL
p->2->3->4->5->NULL
---------------------
L->2->1->NULL
p->3->4->5->NULL
---------------------
...
关键代码仅四行:
p = L;
q = NULL;
L = NULL;
while(p)
{
q = p->next;
p->next = L;
L = p;
p = q;
}
while结束了,逆转也OK了
逆转后头指针仍为L
=====================================
2、直接将指针全部反转。
head这里为头结点。
Linklist* LinkReverse(Linklist *head)
{
if (head == NULL || head ->next == NULL || head->next-next == NULL)
{
reurn head;
//只有一个节点或头节点为空,空操作
}
LinkList *p = head->next;
LinkList *q = head->next->next;
while(q)
{
t = q->next;
q->next = p;
p = q;
q = t;
}
head->next->next = NULL; /*设置链表尾*/
head->next = p;
return head;
}
1、逆序问题用三个字解决:前插法
L->1->2->3->4->5->NULL //L为原表
p = L;
L = NULL;
---------------------
L->1->NULL
p->2->3->4->5->NULL
---------------------
L->2->1->NULL
p->3->4->5->NULL
---------------------
...
关键代码仅四行:
p = L;
q = NULL;
L = NULL;
while(p)
{
q = p->next;
p->next = L;
L = p;
p = q;
}
while结束了,逆转也OK了
逆转后头指针仍为L
=====================================
2、直接将指针全部反转。
head这里为头结点。
Linklist* LinkReverse(Linklist *head)
{
if (head == NULL || head ->next == NULL || head->next-next == NULL)
{
reurn head;
//只有一个节点或头节点为空,空操作
}
LinkList *p = head->next;
LinkList *q = head->next->next;
while(q)
{
t = q->next;
q->next = p;
p = q;
q = t;
}
head->next->next = NULL; /*设置链表尾*/
head->next = p;
return head;
}
相关文章推荐
- 如何逆序输出一个链表的节点内容
- 单链表(二):如何实现单链表的排序、逆置(逆序)
- 单链表(二):如何实现单链表的排序、逆置(逆序)
- 如何实现将一个链表逆序?
- 如何逆序输出单链表?
- 不开辟用于交换数据的临时空间,如何完成字符串的逆序
- 数据结构实验之链表二:逆序建立链表
- 简单算法 - 链表逆序思路详解
- 链表逆序
- 没有头结点的单链表如何删除结点
- [总结] 到底如何反转一个链表
- C++中如何对单向链表操作
- 学习笔记——C语言实现单链表的基本操作:创建、输出、插入结点、删除结点、逆序链表
- 链表编程题专题--逆序链表
- 如何在O(1)时间删除链表指定节点(Java实现)
- 单链表逆序、反转
- 逆序链表--递归思路
- 单向链表逆序问题
- 单链表逆序
- 【面试】3.如何判断链表是否有环?如何计算环的长度?