zoukankan      html  css  js  c++  java
  • 反转链表(不改变指针)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;
            }
        }
    }
  • 相关阅读:
    IOC
    paxos算法
    搜索引擎相关
    java常识
    Redis相关概念
    Keepalived简单理解
    LVS简单理解
    dbproxy
    用不上索引的sql
    二叉树、B树、B+树、B*树、VAL树、红黑树
  • 原文地址:https://www.cnblogs.com/lihaozy/p/3208103.html
Copyright © 2011-2022 走看看