算法学习----反转链表
来源:互联网 发布:xampp mysql mac设置 编辑:程序博客网 时间:2024/06/13 09:18
输入一个链表的头结点,将这个链表反转并输出它的新的头结点
/*public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}*///方法一:public class Solution { public ListNode ReverseList(ListNode head) { if(head==null) return null; if(head.next==null)return head; ListNode h1 = head;//h1指向初始头结点,最后将初始头结点的next域置空 ListNode p = null;//作为h2的下一个节点,保证未被旋转的后续节点,引用的存在 ListNode h2 = head.next; //h2总是指向下一个要被旋转的节点 while(h2.next!=null){ p =h2.next;//p指向h2的下一个节点,保证未被旋转的节点临时头结点的存在 h2.next = head;//当前旋转节点的next指向已经旋转完毕的头结点位置 head = h2;//当前头结点旋转完毕,head重新指向新的头结点 h2 = p;//h2指向下一个未被旋转的临时头结点 if(h2.next==null){//如果此时h2的next域为null,说明已经到原始链表尾部,不能在进行while循环 h2.next = head;//循环到最后一个节点时,不满足循环条件,会跳出循环,所以加了一个if head = h2; break; } } h1.next = null; return head; }}//方法二:**(其实我写的这两个差不多,为什么要写相似的两个?因为我要学习区别使用p和p.next的区别)**public class Solution { public ListNode ReverseList(ListNode head) { if(head==null)return null; if(head.next==null) return head; ListNode p = head.next; ListNode q = null; boolean flag = true; while(p!=null){//判断p是否为空 q = p.next;//注意q可能为空 p.next = head;//将新节点接入到反转的列表中 if(flag) {head.next=null;flag = false;}//把第一次头结点指向第二个节点的next域清空 head = p;//将头结点移向新接入的节点上 p = q;//将q指向未加入反转列表的临时头节点引用 // flag = false;//将标示量变为false,后续不需要将next域置空,为了优化程序把它挪到上边if中去 } return head;//返回头结点 }}
阅读全文
0 0
- [算法学习]反转链表
- 算法学习----反转链表
- 算法学习之链表反转
- 算法.链表反转
- 链表反转算法
- 数据结构与算法学习笔记(二)反转链表
- 算法之反转链表
- 算法之链表反转
- 算法题目-反转链表
- 算法题目---反转链表
- 算法-链表反转操作
- 算法题--反转链表
- 算法题/反转链表
- 每天学习一点点系列之基本算法学习(链表反转)
- 句子反转 -- JAVA 算法学习
- 反转一个链表。循环算法
- 反转一个链表。递归算法
- 反转一个链表。递归算法
- 在java中wait和sleep方法的不同?
- Unit testing framework
- S
- 自学Java之准备
- php微信
- 算法学习----反转链表
- postgres备份延伸之配置centos的文件夹相关权限
- 集群与负载均衡系列(8)——redis主从复制+哨兵实现高可用性架构
- expected at least 1 bean which qualifies as autowire candidate.
- 我在一个基础协议中增加了一个字段, 导致同事core dump了!
- 1834: [ZJOI2010]network 网络扩容
- 关于myBatis与SQLserver 配合使用,查询类型为Date的数据时,日期会减少两天的问题
- 基数排序
- *有向图强连通分量——Tarjan