• 反转链表(不改变指针)JAVA版


    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再学习——栈(stack)和堆(heap)
    Java再学习——深究static关键字
    毕业设计进度:3月4日
    毕业设计进度:3月3日
    可视化组件:echarts柱状图添加点击事件
    毕业设计进度:2月29日
    毕业设计进度:2月28日
    毕业设计进度:2月27日
    毕业设计进度:2月26日
    毕业设计进度:2月25日
  • 原文地址:https://www.cnblogs.com/lihaozy/p/3208103.html
Copyright © 2020-2023  润新知