http://blog.csdn.net/yxh0823/article/details/6080163
设链表节点为
-
typedefstructtagListNode{
-
intdata;
-
structtagListNode*next;
-
}ListNode,*List;
-
typedefstructtagListNode{
-
intdata;
-
structtagListNode*next;
-
}ListNode,*List;
要求将一带链表头List head的单向链表逆序。
分析:
1). 若链表为空或只有一个元素,则直接返回;
2). 设置两个前后相邻的指针p,q. 将p所指向的节点作为q指向节点的后继;
3). 重复2),直到q为空
4). 调整链表头和链表尾
示例:以逆序A->B->C->D为例,图示如下
实现及测试代码如下:
-
#include<stdio.h>
-
#include<stdlib.h>
-
-
typedefstructtagListNode{
-
intdata;
-
structtagListNode*next;
-
}ListNode,*List;
-
-
voidPrintList(Listhead);
-
ListReverseList(Listhead);
-
-
intmain()
-
{
-
//分配链表头结点
-
ListNode*head;
-
head=(ListNode*)malloc(sizeof(ListNode));
-
head->next=NULL;
-
head->data=-1;
-
-
//将[1,10]加入链表
-
inti;
-
ListNode*p,*q;
-
p=head;
-
for(inti=1;i<=10;i++)
-
{
-
q=(ListNode*)malloc(sizeof(ListNode));
-
q->data=i;
-
q->next=NULL;
-
p->next=q;
-
p=q;
-
}
-
-
PrintList(head);/*输出原始链表*/
-
head=ReverseList(head);/*逆序链表*/
-
PrintList(head);/*输出逆序后的链表*/
-
return0;
-
}
-
-
ListReverseList(Listhead)
-
{
-
if(head->next==NULL||head->next->next==NULL)
-
{
-
returnhead;/*链表为空或只有一个元素则直接返回*/
-
}
-
-
ListNode*t=NULL,
-
*p=head->next,
-
*q=head->next->next;
-
while(q!=NULL)
-
{
-
t=q->next;
-
q->next=p;
-
p=q;
-
q=t;
-
}
-
-
/*此时q指向原始链表最后一个元素,也是逆转后的链表的表头元素*/
-
head->next->next=NULL;/*设置链表尾*/
-
head->next=p;/*调整链表头*/
-
returnhead;
-
}
-
-
voidPrintList(Listhead)
-
{
-
ListNode*p=head->next;
-
while(p!=NULL)
-
{
-
printf("%d",p->data);
-
p=p->next;
-
}
-
printf("/n");
-
}
分享到:
相关推荐
IT公司最常见笔试题。2010-06-07编写。欢迎讨论。 QQ:114723704
问题:如何实现一个高效的单向链表逆序输出?出题人:阿里巴巴出题专家:昀龙/阿里云弹性人工智能负责人参考答案:下面是其中一种写法,也可以有不同的写法,比如递归等。
链表逆序链表逆序链表逆序链表逆序链表逆序链表逆序链表逆序链表逆序链表逆序链表逆序链表逆序链表逆序
这是一个简单的java程序,用于实现对输入字符的逆序输出。初学者可以参考。
链表逆序算法,最简单的算法,有些算法可以不必自己写出,会用就可以,比如这个算法,很简单,很有效,代码整洁清晰
主要介绍了C语言数据结构实现链表逆序并输出的相关资料,需要的朋友可以参考下
使用纯粹C语言编写的链表逆序的源代码,有大量注释,特别适合C语言初学者学习和查阅。
1.1.1 如何实现一个高效的单向链表逆序输出?
问题:如何实现一个高效的单向链表逆序输出?出题人:阿里巴巴出题专家:昀龙/阿里云弹性人工智能负责人参考答案:下面是其中一种写法,也可以有不同的写法,比如递归等。
数据结构的线性链表的查找,删除,逆序,顺序等功能
主要讲述以http://blog.csdn.net/LCL_data/archive/2009/12/09/4974499.aspx中的链表逆序为模板来讲述指针的使用
简洁的做法是 遍历链表, 元素进栈, 遍历的同时销毁原来的链表。 元素出栈, 建立新链表。 高效的是,
对于链表有兴趣的朋友 ,作用很大。里面有几种不同的方法,c++。
——学习参考资料:仅用于个人学习使用! 本代码仅作学习交流,切勿用于商业用途,否则后果自负。若涉及侵权,请联系,会尽快处理! 未进行详尽测试,请自行调试!
主要介绍了C语言解字符串逆序和单向链表逆序问题的代码示例,求逆序也是考研和面试中的基础算法题类型,需要的朋友可以参考下
数据结构课程练习---------------------------------------逆序链表的输入输出
C语言链表的各种操作,链表是各种发杂数据结构的基础,掌握链表很重要。。。
单链表逆序 步骤: 1. 初始化单链表 2. 动态创建单链表(插入操作) 3. 逆序算法处理 4. 打印输出 5. 释放动态创建的单链表