ZT 链表逆序
2024-08-24 00:33:56
设链表节点为
[cpp] view plaincopy
- typedef struct tagListNode{
- int data;
- struct tagListNode* next;
- }ListNode, *List;
要求将一带链表头List head的单向链表逆序。
分析:
1). 若链表为空或只有一个元素,则直接返回;
2). 设置两个前后相邻的指针p,q. 将p所指向的节点作为q指向节点的后继;
3). 重复2),直到q为空
4). 调整链表头和链表尾
示例:以逆序A->B->C->D为例,图示如下
实现及测试代码如下:
[cpp] view plaincopy
- #include <stdio.h>
- #include <stdlib.h>
- typedef struct tagListNode{
- int data;
- struct tagListNode* next;
- }ListNode, *List;
- void PrintList(List head);
- List ReverseList(List head);
- int main()
- {
- //分配链表头结点
- ListNode *head;
- head = (ListNode*)malloc(sizeof(ListNode));
- head->next = NULL;
- head->data = -1;
- //将[1,10]加入链表
- int i;
- ListNode *p, *q;
- p = head;
- for(int i = 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); /*输出逆序后的链表*/
- return 0;
- }
- List ReverseList(List head)
- {
- if(head->next == NULL || head->next->next == NULL)
- {
- return head; /*链表为空或只有一个元素则直接返回*/
- }
- 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; /*调整链表头*/
- return head;
- }
- void PrintList(List head)
- {
- ListNode* p = head->next;
- while(p != NULL)
- {
- printf("%d ", p->data);
- p = p->next;
- }
- printf("/n");
- }
最新文章
- C++ activemq CMS 学习笔记.
- 引用log4j.jar包后,出现告警
- service postgresql initdb [FAILED]
- js用ajax和不同页面的php互相传值的方法
- 常用命令之ps
- GPU crash unmap page access
- EIG集团简单介绍
- Selenium WebDriver 中鼠标和键盘事件分析及扩展(转)
- MIST
- Windows多桌面切换(CreateDesktop,SwitchDesktop函数)
- 自己动手写CPU之第八阶段(4)——转移指令实现过程2
- 如何写兼容浏览器和Node.js环境的Javascript代码
- 【CRC校验】学习笔记
- javascript 总结学习一
- MySQL执行计划extra中的using index 和 using where using index 的区别
- [bzoj2665] [cqoi2012]编号
- mobiscroll2.5.4 日期组件
- DB(1):SQLAPI catch [Bind variable/parameter &#39;pay_acc_id&#39; not found] !!!
- java虚拟机 之 垃圾回收机制
- 流媒体技术学习笔记之(一)nginx+nginx-rtmp-module+ffmpeg搭建流媒体服务器
热门文章
- C#截取字符串(转载)
- Oracle安装后遇到错误:The Network Adapter could not establish the connection
- pch文件配置
- xamarin.Android ImageView 异步加载网络图片
- 了解RabbitMQ
- (文章也有问题,请自行跳过)react中的状态机每次setState都是重新创建新的对象,如需取值,应该在render中处理。
- arcgis 加载高德地图 es6的方式
- CVE-2018-10945 mongoose越界访问
- vue router 配合transition 切换动画
- mysql 运行 sql 脚本