单链表 - 单链表的反转 - 腾*和*迅的面试题
发布日期:2021-06-30 16:57:26
浏览次数:2
分类:技术文章
本文共 3849 字,大约阅读时间需要 12 分钟。
文章目录
说明
运行时间O(N)
首先,弄一个简单的单链表,包括- 首尾节点、大小
- add()、show()、Node静态内置类
然后,添加reverse(),实现反转功能
最后,写测试方法,@Test调用其中,reverse的实现思路为:
(转向操作)- 创建 i n d e x N o d e N e x t S h o u l d \color{#4285f4}{indexNodeNextShould} indexNodeNextShould,指向上一个节点的信息
- 创建 i n d e x N e x t N o d e \color{#34a853}{indexNextNode} indexNextNode ,指向下一个节点的信息
- 当 前 节 点 \color{#ea4335}{当前节点} 当前节点连接 i n d e x N o d e N e x t S h o u l d \color{#4285f4}{indexNodeNextShould} indexNodeNextShould
(为下次循环做准备)
- i n d e x N o d e N e x t S h o u l d \color{#4285f4}{indexNodeNextShould} indexNodeNextShould指向 当 前 节 点 \color{#ea4335}{当前节点} 当前节点作为上一个节点
- 当 前 节 点 \color{#ea4335}{当前节点} 当前节点指向 i n d e x N e x t N o d e \color{#34a853}{indexNextNode} indexNextNode (当前节点后移)
g o o g l e \color{#4285f4}{g}\color{#ea4335}{o}\color{#fbbc05}{o}\color{#4285f4}{g}\color{#34a853}{l}\color{#ea4335}{e} google
代码实现
简单的单链表
package cn.edut.test;import org.junit.Test;public class MySingleLinkedList{ private Node first ; private Node last ; private int size; public boolean add(T e) { if(first==null) { //第一元素添加 first =new Node (e,null); last = first; }else { //非第一次 last.next = new Node (e, null); last = last.next; } size++; return true; } public void show() { System.out.print("["); Node next = first; for(int index=0 ; index { private Node next ; private T elementDate ; public Node(T e , Node nex) { this.elementDate = e ; this.next = nex; } }}
reverse()
public void reverse() { //没初始化,只有一个值 if(first==null||first==last) { return ; } //记录当前操作节点 NodeindexNode = first; //存储上一个节点 Node indexNodeNextShould = null; while(true) { //记录下一节点 Node indexNextNode = indexNode.next; //当前节点的next==上一个节点 indexNode.next = indexNodeNextShould ; //存储上一个节点记录往后移 indexNodeNextShould = indexNode; if(indexNode == last) { break; }else { //操作节点后移 indexNode = indexNextNode; } } //首尾节点指向调转 Node temp = last; last = first ; first = temp ; }
@Test调用
/** * 测试 创建、add、清除、reverse、Iterator */ @Test public void test01() { //弄几个数据进去 MySingleLinkedListmll = new MySingleLinkedList (); while(mll.size<10) { mll.add(mll.size); } System.out.print("调转前:");mll.show(); //数据调转 mll.reverse(); System.out.print("调转后:");mll.show(); }
完整代码
package cn.edut.test;import org.junit.Test;public class MySingleLinkedList{ /** * 测试 创建、add、清除、reverse、Iterator */ @Test public void test01() { //弄几个数据进去 MySingleLinkedList mll = new MySingleLinkedList (); while(mll.size<10) { mll.add(mll.size); } System.out.print("调转前:");mll.show(); //数据调转 mll.reverse(); System.out.print("调转后:");mll.show(); } private Node first ; private Node last ; private int size; public boolean add(T e) { if(first==null) { //第一元素添加 first =new Node (e,null); last = first; }else { //非第一次 last.next = new Node (e, null); last = last.next; } size++; return true; } public void show() { System.out.print("["); Node next = first; for(int index=0 ; index { private Node next ; private T elementDate ; public Node(T e , Node nex) { this.elementDate = e ; this.next = nex; } } public void reverse() { //没初始化,只有一个值 if(first==null||first==last) { return ; } //记录当前操作节点 Node indexNode = first; //存储上一个节点 Node indexNodeNextShould = null; while(true) { //记录下一节点 Node indexNextNode = indexNode.next; //当前节点的next==上一个节点 indexNode.next = indexNodeNextShould ; //存储上一个节点记录往后移 indexNodeNextShould = indexNode; if(indexNode == last) { break; }else { //操作节点后移 indexNode = indexNextNode; } } //首尾节点指向调转 Node temp = last; last = first ; first = temp ; }}
测试结果
转载地址:https://lawsssscat.blog.csdn.net/article/details/103002473 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
表示我来过!
[***.240.166.169]2024年04月12日 15时01分57秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
leetcode 122 买卖股票的最佳时机II
2019-04-30
leetcode 309 最佳买卖股票含冷冻期
2019-04-30
leetcode 714 买卖股票的最佳时机含手续费
2019-04-30
leetcode3 无重复字符的最长子串
2019-04-30
leetcode 76 最小覆盖子串
2019-04-30
leetcode 1143. 最长公共子序列
2019-04-30
leetcode 83. 删除排序链表中的重复元素
2019-04-30
智能体 Intelligent Agent
2019-04-30
Network Compression网络压缩(一)
2019-04-30
GAN系列(零)—— GAN的发展(两条路线)
2019-04-30
Conditional GAN (CGAN) 条件生成网络
2019-04-30
强化学习(三) —— Policy Gradient 策略梯度
2019-04-30
docker安装oracle(win10)
2019-04-30
Cloudera Quickstart & HUE
2019-04-30
HUE
2019-04-30
CDH
2019-04-30
行为树 BT
2019-04-30
Cassandra & CQL
2019-04-30
Oracle数据库
2019-04-30
Oracle数据库命令
2019-04-30