Java如何翻转链表
发表于:2025-01-31 作者:千家信息网编辑
千家信息网最后更新 2025年01月31日,本篇内容介绍了"Java如何翻转链表"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!package c
千家信息网最后更新 2025年01月31日Java如何翻转链表
本篇内容介绍了"Java如何翻转链表"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
package com.lifeibigdata.algorithms.leetcode;/** * Created by lifei on 16/6/30. */public class ReverseListNode { public static void main(String[] args) { ListNode head=new ListNode(1); ListNode n1 =new ListNode(2); ListNode n2 =new ListNode(3); ListNode n3 =new ListNode(4); //初始化链表 head.next = n1 ; n1.next = n2; n2.next = n3; System.out.println("打印链表反转前:"); Utils.print(head); ReverseListNode rln = new ReverseListNode(); System.out.println("打印链表反转后:"); ListNode newHead = rln.reverse4(head);//TODO 3种方式 Utils.print(newHead);// System.out.println("===========create==============");// ListNode cln = createList(new int[]{1,2,3,4,5});// Utils.print(cln); } /** * 第一轮 * 3.next (reverse) revHead 4 * 3.next.next=4.next(赋值前为null) 3 * 3.next -> null * 4 3 null * *第二轮 * 2.next.next=3.next(赋值前为null) 2 * 2.next -> null * 4 3 2 null * * * * @param head * @return */ ListNode reverse(ListNode head){ if (null == head || null == head.next){//TODO 如果是终节点,就会将终结点返回,所以revHead就是终结点 return head; } ListNode revHead = reverse(head.next); System.out.println("----"+head.val+","+head.next.val+"----"); head.next.next = head; //3.next.next(4.next,此时4是翻转后的头结点)=3 head.next = null; //3.next=null return revHead; } //"头插法"思想描述:从链表的第一个结点开始,以每一个结点为单位,遍历链表,将遍历到的结点依次插入到头结点的后面 ListNode reverse2(ListNode head){//TODO if (null == head || null == head.next) { return head; } ListNode pre = null; //新链表过程中的头结点 ListNode cur = head; //cur为遍历的游标,同时也是最后返回链表的头结点 ListNode next = cur.next; while (next != null){ //todo cur为即将插入的节点,此处是判断循环终止的条件 cur.next = pre; //将待插入的节点->新链表的头结点 pre = cur; //将新插入的节点,作为下一次循环的头结点 cur = next; //循环下一个节点 next = cur.next; //判断新节点的下一个节点,进行循环 } cur.next = pre; return cur; } //头插法 static ListNode reverse3(ListNode head) { if (null == head || null == head.next) { return head; } ListNode nextHead = null; //待转置的下一个节点 ListNode newHead = null; //新链的头节点 ListNode newn = null; //待插入插入的节点 需要待插入的节点直接指向新链的头节点,那么返回新插入的节点,就是插入之后链的头节点 newHead = head; //把旧头结点赋值给新头结点 head = head.next; //此时的head已经是第二个节点 newHead.next = null; while(head.next != null){ //此时的head是第二个节点,该节点为需要加入链表的新节点,即newn; head.next第三个节点,, nextHead = head.next; //下一次待转置的节点 newn = head; //将要插入的新节点 newn.next = newHead; //新插入的节点指向 新链的头节点 newHead = newn; //将新插入的节点作为新链的节点 // newn.next = newHead.next; //错误的 不能用创建链表的方式,因为创建链表的方式有一个空的头节点 // newHead.next = newn; //错误的 head = nextHead; } newn = head; //因为每次判断的是新插入节点的下一个节点,所以最后一个节点不在循环中,此时的head就是最后一个节点 newn.next = newHead; return newn; } ListNode reverse4(ListNode L){//TODO ListNode head = null; ListNode temp ; while (L != null){ temp = L.next;//将第二个节点赋值给tmp L.next = head;//将第一个节点指向新的头结点 head = L; //将新的头结点L赋值给head,用于下次循环 L = temp; //下一次迭代中迭代的是第二个节点 } return head; } /** * 图示 * @param head * @return */ ListNode reverse5(ListNode head){//TODO ListNode pRerverseHead = null; ListNode pNode = head; ListNode pPrev = null; while (pNode != null){ ListNode next = pNode.next; if (next == null){ pRerverseHead = pNode; } pNode.next = pPrev; pPrev = pNode; pNode = next; } return pRerverseHead; } static ListNode createList(int[] values){ ListNode head = new ListNode(0); for(int i = 0;i < values.length;i++){ ListNode node = new ListNode(values[i]);//新节点node node.next = head.next;//将头节点的尾部转移到新节点的尾部 head.next = node;//将头结点尾部指向新节点 } return head.next; } /** * * 打印链表反转前: 1->2->3->4-> 打印链表反转后: ----4,3---- ----3,2---- ----2,1---- 4->3->2->1-> */}
"Java如何翻转链表"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!
节点
结点
循环
就是
指向
方式
内容
更多
知识
终结点
过程
错误
迭代
实用
学有所成
接下来
三个
单位
同时
困境
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
网络技术员面试问题
数据库向表中插入多个数据
修改服务器管理地址
数据库体系结构3级模式
被收购网络安全股涨停
道哥it视频教学网络安全
栖霞直播软件开发公司
网络安全法全文宣传单
短视频服务器租用
如何连vpn服务器
怎么创建企业密信服务器
升级服务器怎么做
软件开发的大致过程
郑州动力网络技术
租服务器100m带宽
上海中宠软件开发招聘
数据库工程师在哪里报名
复古冰雪服务器
数据库建表班长
涉及网络安全的相关法律法规
东莞网络安全培训十大品牌
河北c语言软件开发价钱是多少
巴东聚隆网络技术服务
计算机网络技术ntc证书
上海 软件开发合同范本
软件开发接口一定要判空
堆栈攻击-八层网络安全防御
服务器开机风扇狂转一下就停了
网络数据库系统主要功能
温州工业软件开发流程