一聚教程网:一个值得你收藏的教程网站

热门教程

Java实现单向链表反转

时间:2022-11-14 23:26:56 编辑:袖梨 来源:一聚教程网

本文实例为大家分享了Java实现单向链表反转的具体代码,供大家参考,具体内容如下

1、实现代码

public class LinkedListTest {

  public static void main(String[] args) {
    Node A = new Node("A");
    Node B = new Node("B");
    Node C = new Node("C");
    Node D = new Node("D");
    Node E = new Node("E");
    Node F = new Node("F");
    A.next = B;
    B.next = C;
    C.next = D;
    D.next = E;
    E.next = F;
    print(A);

    LinkedListReversor reversor = LinkedListReversor.RECURSION;
    System.out.println(reversor.getStrategy() + ":");
    Node tmp = reversor.execute(A);
    print(tmp);

    reversor = LinkedListReversor.NO_RECURSION;
    System.out.println(reversor.getStrategy() + ":");
    print(reversor.execute(tmp));
  }

  private static void print(Node node) {
    while (node != null) {
      System.out.print(node.value);
      node = node.next;
      if (node != null) {
        System.out.print("->");
      } else {
        System.out.println();
      }
    }
  }

}

class Node {
  public String value;
  public Node next;

  public Node(String value) {
    this.value = value;
  }
}

enum LinkedListReversor {
  RECURSION("递归") {
    @Override
    public Node execute(Node node) {
      Node prev = null;
      if (node == null || node.next == null) {
        prev = node;
      } else {
        Node tmp = execute(node.next);
        node.next.next = node;
        node.next = null;
        prev = tmp;
      }
      return prev;
    }
  },
  NO_RECURSION("非递归") {
    @Override
    public Node execute(Node node) {
      Node prev = null;
      while (node != null) {
        Node tmp = node;
        node = node.next;
        tmp.next = prev;
        prev = tmp;
      }
      return prev;
    }
  };
  private String strategy;

  private LinkedListReversor(String strategy) {
    this.strategy = strategy;
  }

  public abstract Node execute(Node node);

  public String getStrategy() {
    return strategy;
  }
}

2、实现思路

递归:从尾部开始处理

非递归:从头部开始处理

热门栏目