题目:将一个有链表头的单向单链表逆序

分析:

链表为空或只有一个元素直接返回;

设置两个前后相邻的指针p,q,使得p指向的节点为q指向的节点的后继;

重复步骤2,直到q为空;

调整链表头和链表尾;

图解:

以链表A->B->C->D为例,逆序此链表。

0.初始状态                                                        1.2.3 循环部分

p = head->next;                                              while(q!=null){

q = head->next->next;                                      t = q->next;

t = null;                                                            q->next = p;

p = q;

q = t;

}

0.初始状态

1.第一次循环

2.第二次循环

3.第三次循环

4.q==null循环结束

head->next->next = null;//设置链表尾

head-next = p;//修改链表头

实现及测试代码

节点Node类:

packagelinkList.reverse;/*** 链表节点

*@authorAdministrator

**/

public classNode {private Integer data;//节点数据域

private Node next;//节点指针域

publicInteger getData() {returndata;

}public voidsetData(Integer data) {this.data =data;

}publicNode getNext() {returnnext;

}public voidsetNext(Node next) {this.next =next;

}

}

逆序方法:

/***

*@paramnode 原始链表头节点

*@return逆序后链表头节点*/Node reverseList(Node head){//如果链表为空或只有一个元素直接返回

if(head.getNext()==null||head.getNext().getNext()==null){returnhead;

}

Node p=head.getNext();

Node q=head.getNext().getNext();

Node t= null;while(q!=null){

t=q.getNext();

q.setNext(p);

p=q;

q=t;

}//设置链表尾

head.getNext().setNext(null);//修改链表头

head.setNext(p);returnhead;

}

测试代码:

//表头

Node head = newNode();

head.setData(-1);

head.setNext(null);//定义指针

Node p;

p=head;//初始化链表数据[1~10]

for(int i=1;i<=10;i++){

Node q= newNode();

q.setData(i);

q.setNext(null);

p.setNext(q);

p=q;

}//输出原始链表

printList(head);

System.out.println("");//输出逆序后的链表

printList(reverseList(head));

链表逆序 java_链表逆序(JAVA实现)相关推荐

  1. 数据结构_Java_基于 线性表-单链表的初始化、逆序、去重、非递减序列的合并(开辟新链表先整体插入一个链表全部元素,再遍历另外一个链表寻找合适位置插入 、开辟新链表实现舍弃原链表)等操作实现

    写在前面 不久前学习了数据结构线性表-数组-链表的相关知识,用C/C++语言实现了 单链表的系列相关操作 .见往期博客: 数据结构实验2_C语言_基于顺序表的非递减有序表的合并.线性表元素的增.删.改 ...

  2. 单链表逆序生成及逆置的完整实现

    单链表逆序生成及逆置的完整实现 本例中单链表数据类型定义成int型,可更改 头文件1(1.h) 宏定义及Status类型定义 头文件2(2.h) 单链表基本操作函数与逆置函数 include" ...

  3. SDUT _2117 数据结构实验之链表二:逆序建立链表

    点击打开链接 数据结构实验之链表二:逆序建立链表 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Discuss Problem D ...

  4. 恢复博客更新 --- 逆序单项链表 要求空间复杂度o(1) 时间复杂度o(n)

    转眼已经2016年3月1日了,前一阵子忙了很多事,包括下决心换了工作,也算是正式进了互联网行业.现在后头想想,人必须趁着有时间有精力时多折腾,毕竟人生短短几十年,如果不折腾以后肯定会后悔. 今天开始恢 ...

  5. 每天一道LeetCode-----将链表每k个节点逆序一次

    Swap Nodes in Pairs 原题链接 Swap Nodes in Pairs 意思是将链表每两个节点互换位置,要求不能直接改变链表的值,只能改变next指针的方式交换 其实就是遍历一遍每两 ...

  6. 【链表】逆序打印链表

    1 public class Main { 2 3 // 逆序打印链表 4 public void reversePrint(Node node) { 5 if (node == null){ 6 r ...

  7. 【C语言】单向链表排序、合并、逆序、分离(链表的头节点不储存数据)

    一.排序 编写程序,在第1题(第1题:编写程序,建立2个带头结点单链表,输入若干整数将正整数插入第1个单链表,将负整数插入第2个单链表,插入前和插入后单链表保持递增或相等次序,显示2个单链表,最后销毁 ...

  8. python单向链表逆序_链表逆序-Python实现

    题目描述: 给定一个带头节点的单链表,将其逆序.即如果单链表原来为head->1->2->3->4->5->6->7,那么逆序后变为head->7-&g ...

  9. python单链表逆序_python链表倒序

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! python 实现双向链表(图解)----双向链表双向链表也叫双链表,是链表的一 ...

最新文章

  1. 深度学习渐趋冷静,为何图形计算却逆势反涨?
  2. redis基础之有序集合应用
  3. 【SpringCloud】Feigin-实例
  4. 数据的预处理与特征构建(申请评分卡模型)
  5. 自动控制matlab实验,自动控制matlab实验.doc
  6. Five bugs in five minutes...
  7. 探索适用于Apache Spark的Spline Data Tracker和可视化工具(第2部分)
  8. .sh文件是什么语言_关于Linux文件的一些基本命令和知识:
  9. Part2--排序算法类模板
  10. Pentest Wiki Part6 权限维持
  11. matlab 实现批量修改文件后缀名 案例
  12. 基于知识图谱和图卷积神经网络的应用——学习笔记
  13. 面试官:Redis中哈希分布不均匀该怎么办
  14. DM达梦数据库存储过程和触发器
  15. 初学graphiql 查询操作
  16. 对网易云音乐参数(params,encSecKey)的分析
  17. 抽象函数(Java)
  18. 标品怎样开直通车?标品开直通车的步骤是什么?标品怎样开直通车能获得高转化?
  19. 学生成绩排名及管理系统c语言,学生成绩管理系统__C语言版.doc
  20. 豆瓣8.0!烂番茄99%鲜!苹果高分冲奥动画《狼行者》精彩幕后来了!

热门文章

  1. 清除MAC 可清除空间
  2. js原生实现上拉加载功能
  3. vdbench测试生成器
  4. 百变冰冰!使用飞桨的PaddleGAN实现妆容迁移
  5. 液晶屏模块如何和客户沟通?
  6. Netflix或将退出支持网络中立原则联盟
  7. 实训——基于 Logisim 的 RISC-V 处理器设计
  8. 运动控制比例随动系统
  9. 没有最兔子,只有更兔子
  10. 干货分享:TikTok五大完美引流方案