注意以下几点
1. 传入为空
由于题目要求比较宽泛,所以采用以下两种方式解答
1. 用空间降低复杂度,使用list存储,借助数组编号寻址,重组链表
/** * Definition for singly-linked list. * class ListNode { * int val; * ListNode next; * ListNode(int x) { * val = x; * next = null; * } * } */ public class Solution { public void reorderList(ListNode head) { if(head == null){ return; } List<ListNode> list = new ArrayList<ListNode>(); while (head !=null ){ list.add(head); head = head.next; } ListNode a = new ListNode(-1); for(int i=0; i<=(list.size()-1)/2; i++){ int j = list.size() - 1- i; a.next = list.get(i); a = a.next; a.next = list.get(j); a = a.next; a.next=null; } } }
2. 纯链表操作,链表分成前后两段,后段倒序,两段链表进行merge
public void reorderList(ListNode head){ if(head == null){ return; } ListNode t = new ListNode(-1); t.next = head; ListNode slow = t; ListNode fast = t; while (fast != null){ slow = slow.next; fast = fast.next; if(fast !=null){ fast = fast.next; } } ListNode tailHead = null; ListNode tailP1 = slow.next; if(tailP1 == null){ return; } slow.next = null; if(tailP1.next != null){ ListNode tailP2 = tailP1.next; tailP1.next=null; if(tailP2.next != null){ ListNode tailP3 = tailP2.next; while (tailP3 != null){ tailP2.next = tailP1; tailP2 = tailP3; tailP1 = tailP2; tailP3 = tailP3.next; } tailP2.next = tailP1; }else { tailP2.next = tailP1; } tailHead = tailP2; }else { tailHead = tailP1; }; ListNode a = new ListNode(-1); while (head !=null && tailHead != null){ a.next = head; head = head.next; a.next.next = tailHead; tailHead = tailHead.next; a=a.next.next; } if(head!=null){ a.next = head; } if(tailHead != null){ a.next = tailHead; } System.out.println(); }
相关推荐
java java_leetcode-114-flatten-binary-tree-to-linked-list
java java_leetcode-115-distinct-subsquences
java java_leetcode-101-symmetric-tree
java java_leetcode-100-same-tree
java java_leetcode-112-path-sum
java java_leetcode-73-set-matrix-zeroes
java java_leetcode-113-path-sumII
java java_leetcode-110-balanced-binary-tree
java java_leetcode-maximum-depth-of-binary-tree
java java_leetcode-99-recover-binary-search-tree
java java_leetcode-111-minimum-depth-of-binary-tree
java java_leetcode-107-binary-tree-level-order-traversal
java java_leetcode-102-binary-tree-level-order-traversal
java java_leetcode-105-construct-binary-tree-from-preorder-and-inorde
https://github.com/geekxingyun/leetcode-java-algorithm-solution.git 然后你会发现当前项目有两个模块。 完成:它是完成的项目,并有一些关于 leetcode 的答案。 初始:只需在模块项目中编写代码 如果您不知道...
本资源“javalruleetcode-leetcode-algorithms-java”专注于 Java 语言在 LeetCode 平台上的算法实现,特别提到了 LRUCache(最近最少使用)数据结构,这是解决实际编程问题时常用的一种高效策略。 LRUCache 是一种...
java lru leetcode LeetCode-Tag-Java 解决方案 LeetCode 的解决方案 指数
《LeetCode-Java-Solutions: Java中LeetCode在线判断问题的解决方案详解》 在编程学习与进阶的过程中,LeetCode是一个不可多得的资源库,它提供了大量的算法题目供程序员练习,以提升自身的编程能力和算法水平。...
#Leetcode-In-Java 代码并不全是本人写的,有的参考了网络上其他前辈的想法,但都能在OJ上AC。 ###索引 1 . Two-Sum 要点: - 利用java中Array对象的sort方法排序,使得整个数组呈升序状态 - 再利用两段取点...
《LeetCode---C++实现》是一本专注于C++编程语言解决LeetCode在线判题平台上的算法问题的书籍。LeetCode是程序员广泛使用的平台,它提供了大量的编程题目来提升编程技能和算法理解,尤其对于准备面试的程序员来说,...