ZT 链表逆序
设链表节点为
- 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为例,图示如下
实现及测试代码如下:
- #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");
- }
ZT 链表逆序的更多相关文章
- Reverse Linked List II 单向链表逆序(部分逆序)
0 问题描述 原题点击这里. 将单向链表第m个位置到第n个位置倒序连接.例如, 原链表:1->2->3->4->5, m=2, n =4 新链表:1->4->3-& ...
- 链表逆序(JAVA实现)
题目:将一个有链表头的单向单链表逆序 分析: 链表为空或只有一个元素直接返回: 设置两个前后相邻的指针p,q,使得p指向的节点为q指向的节点的后继: 重复步骤2,直到q为空: 调整链表头和链表尾: 图 ...
- 链表逆序,java实现
package com.cskaoyan.linkedlist; //反转数组 public class LinkedListDemo2 { public static Node reverse(No ...
- C# 单向链表 逆序(递归)
static void Main(string[] args) { while (true) { LinkedList L = new LinkedList(); L.Add(new Node(&qu ...
- 链表逆序---python
class ListNode: Value = '' # 节点要储存的值,因为Python是弱类型,因此无需传入泛型 Next = None # 下一个节点,初始化时为空值 def __init__( ...
- 剑指Offer03 逆序输出链表&链表逆序
多写了个逆序链表 /************************************************************************* > File Name: ...
- 基于visual Studio2013解决面试题之0504单链表逆序
题目
- 【云栖社区001-数据结构】如何实现一个高效的单向链表逆序输出(Java版)
如题 动手之前,发现自己很擅长用C语言来写链表. 不过,既然自己做的是Java开发,那么还是用Java实现这个算法吧:毕竟,以后的若干年里都差不多要跟Java打交道了. 于是,先将Java版的链表自学 ...
- C语言两个升序递增链表逆序合并为一个降序递减链表,并去除重复元素
#include"stdafx.h" #include<stdlib.h> #define LEN sizeof(struct student) struct stud ...
随机推荐
- JavaScript函数——预编译
四部曲 创建AO对象 找形参和变量声明,将变量和形参名作为AO属性名,值为undefined. 将实参值和形参值统一 在函数体内找函数声明,值赋予函数体. 权重按顺序依次增加.以下例子即可体现上述规则 ...
- spark集群搭建(java)未完待续
环境 操作系统:windows10 虚拟机工具:VMware14.1 NUX版本:Centos7.2(64) JDK:1.8(64) 一.安装linux,master(桥接模式上网),slave(na ...
- VS2013 项目项目安装和部署
版权声明:本文为博主原创文章,未经博主允许不得转载. 1.release 模式下生成项目 2.解决方案 右键 添加 新建项目 其他项目类型 安装和部署 3.操作前将待打包项目发布路径指向上述 ...
- Ionic3 UI组件之 ImageLoader
ImageLoader:通过后台线程加载图片(异步)并缓存.类似于Glide或者Picasso. 组件特性: 后台线程下载图片,下载速度更快,不使用webview的资源: 缓存图像.图像将在您下次显示 ...
- python学习之参数传递
^参数传递分为定义(形参)和调用(实参)两种情况.^ 1. 定义(形参) 默认参数 def func(x, y=None): # 任何时候必须 优先定义 位置参数 # 默认参数和可变参数*args 顺 ...
- WIN 10 初体验:期待越多失望越大
我大多数时候使用 MacBook,不过 WIN 10(预览版)的推送还是让我忍不住升级玩玩——它是微软史上首款真正意义上的免费操作系统,正式版将与中国诸多互联网巨头联合提供升级工具分发这一体现了微软迎 ...
- C# UML类图及类之间的几种关系
今天晚上看了大话设计模式中的UML类图这一节感觉受益匪浅,好多年不能理解的类之间的关系理解了. 一.UML类图的表示方法 1.类的表示方法 A类用一个矩形框分三层表示,第一层是类名,斜体类名表示抽象类 ...
- 啰里吧嗦redis
1.redis是什么 redis官网地址 Redis is an open source (BSD licensed), in-memory data structure store, used as ...
- Jquery全选系列操作(锋利的jQuery)
Jquery全选系列操作(锋利的jQuery) <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml" ...
- htm-文字标签和注释标签
文字标签:修改文字的样式 <font></font> 属性: size:文字的大小 取值范围 1-7,超出了7,默认还是7 color:文字颜色 两种表示方法 英文单词:re ...