zl程序教程

您现在的位置是:首页 >  后端

当前栏目

Java反转单链表

JAVA 反转 单链
2023-09-11 14:21:55 时间
[java] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. class Node {  
  2.     private int data;  
  3.     private Node nextNode;  
  4.   
  5.     public Node(int data) {  
  6.         this.data = data;  
  7.     }  
  8.     public int getData() {  
  9.         return data;  
  10.     }  
  11.     public void setData(int data) {  
  12.         this.data = data;  
  13.     }  
  14.     public Node getNextNode() {  
  15.         return nextNode;  
  16.     }  
  17.     public void setNextNode(Node nextNode) {  
  18.         this.nextNode = nextNode;  
  19.     }  
  20. }  
  21.   
  22. public class ReverseSingleList {  
  23.       
  24.     public static Node reverse(Node head) {  
  25.         if (null == head || null == head.getNextNode()) {  
  26.             return head;  
  27.         }  
  28.           
  29.         Node reversedHead = reverse(head.getNextNode());  
  30.         head.getNextNode().setNextNode(head);  
  31.         head.setNextNode(null);  
  32.           
  33.         return reversedHead;  
  34.     }  
  35.       
  36.     public static Node reverse2(Node head) {  
  37.         if (null == head || null == head.getNextNode()) {  
  38.             return head;  
  39.         }  
  40.           
  41.         Node node1 = head;  
  42.         Node node2 = head.getNextNode();  
  43.         head.setNextNode(null);  
  44.         while (null != node2) {  
  45.             node1 = node2;  
  46.             node2 = node2.getNextNode();  
  47.             node1.setNextNode(head);  
  48.             head = node1;  
  49.         }  
  50.           
  51.         return head;  
  52.     }  
  53.   
  54.     public static void main(String[] args) {  
  55.         Node head = new Node(0);  
  56.         Node cur = head;  
  57.         Node tmp = null;  
  58.           
  59.         // 构造一个长度为10的链表,保存头节点对象head     
  60.         for (int i = 1; i < 10; i++) {  
  61.             tmp = new Node(i);  
  62.             cur.setNextNode(tmp);  
  63.             cur = tmp;  
  64.         }  
  65.           
  66.         //打印反转前的链表  
  67.         Node h = head;  
  68.         while (null != h) {  
  69.             System.out.print(h.getData() + " ");  
  70.             h = h.getNextNode();  
  71.         }  
  72.           
  73.         //调用反转方法  
  74.         //head = reverse(head);  
  75.         head = reverse2(head);  
  76.         System.out.println("\n**************************");  
  77.           
  78.         //打印反转后的结果  
  79.         while (null != head) {  
  80.             System.out.print(head.getData() + " ");  
  81.             head = head.getNextNode();  
  82.         }  
  83.     }  
  84. }  
 
运行结果:

0 1 2 3 4 5 6 7 8 9

**************************

9 8 7 6 5 4 3 2 1 0