Java基础之翻转单链表

来源:互联网 发布:虚拟社交网络弊大于利 编辑:程序博客网 时间:2024/06/09 21:44
/**   * @author luochengcheng   * 定义一个单链表   */  class Node {       //变量       private int record;       //指向下一个对象       private Node nextNode;         public Node(int record) {           super();           this.record = record;       }       public int getRecord() {           return record;       }       public void setRecord(int record) {           this.record = record;       }       public Node getNextNode() {           return nextNode;       }       public void setNextNode(Node nextNode) {           this.nextNode = nextNode;       }   }     /**   * @author luochengcheng   *  两种方式实现单链表的反转(递归、普通)   *  新手强烈建议旁边拿着纸和笔跟着代码画图(便于理解)   */  public class ReverseSingleList {       /**        * 递归,在反转当前节点之前先反转后续节点        */      public static Node reverse(Node head) {           if (null == head || null == head.getNextNode()) {               return head;           }           Node reversedHead = reverse(head.getNextNode());           head.getNextNode().setNextNode(head);           head.setNextNode(null);           return reversedHead;       }         /**        * 遍历,将当前节点的下一个节点缓存后更改当前节点指针        *         */      public static Node reverse2(Node head) {           if (null == head) {               return head;           }           Node pre = head;           Node cur = head.getNextNode();           Node next;           while (null != cur) {               next = cur.getNextNode();               cur.setNextNode(pre);               pre = cur;               cur = next;           }           //将原链表的头节点的下一个节点置为null,再将反转后的头节点赋给head              head.setNextNode(null);           head = pre;                      return head;       }         public static void main(String[] args) {           Node head = new Node(0);           Node tmp = null;           Node cur = null;           // 构造一个长度为10的链表,保存头节点对象head              for (int i = 1; i < 10; i++) {               tmp = new Node(i);               if (1 == i) {                   head.setNextNode(tmp);               } else {                   cur.setNextNode(tmp);               }               cur = tmp;           }           //打印反转前的链表           Node h = head;           while (null != h) {               System.out.print(h.getRecord() + " ");               h = h.getNextNode();           }           //调用反转方法           head = reverse2(head);           System.out.println("\n**************************");           //打印反转后的结果           while (null != head) {               System.out.print(head.getRecord() + " ");               head = head.getNextNode();           }       }   }  
0 0
原创粉丝点击