java 구현 단일 체인표 역전 상세 및 실례 코드

java 실현 단일 체인표 역전 상세
인스턴스 코드:

class Node { 
  Node next; 
  String name; 
  public Node(String name) { 
    this.name = name; 
  } 
 
  /** 
   *   
   */ 
  public void show() { 
    Node temp = this; 
    do { 
      System.out.print(temp + "->"); 
      temp = temp.next; 
    }while(temp != null); 
    System.out.println(); 
  } 
 
  /** 
   *  , : , StackOverflowError 
   * @param n 
   * @return 
   */ 
  public static Node recursionReverse(Node n) { 
    long start = System.currentTimeMillis(); 
    if(n == null || n.next == null) { 
      return n; 
    } 
    Node reverseNode = recursionReverse(n.next); 
 
    n.next.next = n; 
    n.next = null; 
    System.out.println(" :" + (System.currentTimeMillis() - start) + "ms..."); 
    return reverseNode; 
  } 
 
  /** 
   *   
   * @param n 
   * @return 
   */ 
  public static Node loopReverse(Node n) { 
    long start = System.currentTimeMillis(); 
    if(n == null || n.next == null) { 
      return n; 
    } 
 
    Node pre = n; 
    Node cur = n.next; 
    Node next = null; 
    while(cur != null) { 
      next = cur.next; 
      cur.next = pre; 
      pre = cur; 
      cur = next; 
    } 
    n.next = null; 
    n = pre; 
    System.out.println(" :" + (System.currentTimeMillis() - start) + "ms..."); 
    return pre; 
  } 
 
  @Override 
  public String toString() { 
    return name; 
  } 
   
  public static void main(String[] args) { 
 
    int len = 10; 
    Node[] nodes = new Node[len]; 
    for(int i = 0; i < len; i++) { 
      nodes[i] = new Node(i + ""); 
    } 
    for(int i = 0; i < len - 1; i++) { 
      nodes[i].next = nodes[i+1]; 
    } 
    /* try { 
      Thread.sleep(120000); 
    } catch (InterruptedException e) { 
      e.printStackTrace(); 
    }*/ 
    Node r1 = Node.loopReverse(nodes[0]); 
    r1.show(); 
    Node r = Node.recursionReverse(r1); 
    r.show(); 
 
  }  
} 

총결산
귀속과 순환에 대해 순환을 사용하여 실현하는 것을 추천합니다. 귀속은 단일 체인 테이블이 너무 크면 StatckOverflowError가 나타날 수 있습니다. 귀속은 방법의 호출과 관련이 있고 성능에서도 순환의 실현보다 약합니다.
읽어주셔서 감사합니다. 여러분에게 도움이 되었으면 좋겠습니다. 본 사이트에 대한 지지에 감사드립니다!

좋은 웹페이지 즐겨찾기