反转链表(不改变指针)JAVA版
2013-07-23 11:10
471 查看
class ListNode { int val; ListNode next; ListNode(int x) { val = x; next = null; } } public class Solution { private ListNode left; //java不支持c++的LinkedList &*p这种方式,所以用member variable来存放left private boolean alreadyDone = false; public void reverseLinkedList(ListNode head) { if (null == head) return; left = head; reverseLinkedListCore(head); } private void reverseLinkedListCore(ListNode right) { if (null == left || null == right) return; reverseLinkedListCore(right.next); //先不停递归,直至right走到最右 if (alreadyDone) //边界条件 return; if (left == right || right.next == left) { //边界条件 前者针对奇数长度的链表,后者针对偶数 alreadyDone = true; return; } int tmp = left.val; //交换部分 left.val = right.val; right.val = tmp; left = left.next; //left往右走一步,然后把跳出一次递归,让right往左走一步 } public static void main(String[] args) { ListNode a = new ListNode(1); ListNode b = new ListNode(2); ListNode c = new ListNode(3); ListNode d = new ListNode(4); ListNode e = new ListNode(5); ListNode f = new ListNode(6); ListNode g = new ListNode(7); a.next = b; b.next = c; c.next = d; d.next = e; e.next = f; f.next = g; Solution sl = new Solution(); sl.reverseLinkedList(a); while (null != a) { System.out.print(a.val + " -> "); a = a.next; } } }
相关文章推荐
- 反转链表(不改变节点指针方向)
- 反转单链表的值,但不改变链表指针地址
- Java没有指针怎么实现链表?
- java单链表反转
- java不用api实现单链表反转(二)
- 【LeetCode-面试算法经典-Java实现】【092-Reverse Linked List II(反转单链表II)】
- 剑指Offer(Java版):反转链表
- java实现链表的反转
- 使用指针P,Q使链表反转
- Java单链表基本操作(四)--单链表反转
- 剑指Offer面试题16(Java版):反转链表
- java链表反转
- 带有首尾的可反转链表(LinkedList)的java实现
- 链表反转(java实现)递归非递归
- Java链表及字符串反转问题集
- 【Java数据结构】Java数据结构之链表反转
- 【LeetCode-面试算法经典-Java实现】【143-Copy List with Random Pointer(有随机指针的链表复制)】
- 单链表反转(Singly Linked Lists in Java)
- 链表的Java实现(使用内部类作为指针的引用)
- 剑指Offer-题16 反转链表(Java)