生活随笔
收集整理的這篇文章主要介紹了
Java实现单链表的反转
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
思路1:初始化一個新的頭節點reverseHead,然后遍歷舊鏈表,利用頭插法向reverseHead進行插入
思路2:
1.反轉相當于數據的更換(1和n,2和n-1,3和n-2)n為鏈表的長度
2.通過遍歷進行數據的更換,n/2為循環退出的條件
package com
.company
;import java
.util
.Stack
;
public class LinkedListDemo {public static void main(String
[] args
) {Node node1
= new Node(1, 96, "Ronin");Node node2
= new Node(2, 100, "lisi");Node node3
= new Node(3, 99, "張三");Node node4
= new Node(4, 63, "zsh");Node node5
= new Node(5, 65, "zms");SingleLinkedList singleLinkedList
= new SingleLinkedList();singleLinkedList
.add(node1
);singleLinkedList
.add(node2
);singleLinkedList
.add(node2
);singleLinkedList
.add(node4
);singleLinkedList
.add(node5
);System
.out
.println("鏈表反轉后的數據如下:");getReverse2(singleLinkedList
.getNode());singleLinkedList
.list();}public static void getReverse(Node head
) {if (head
.next
== null
) {System
.out
.println("LinkedList is empty!");return;}int length
= getLength(head
);int num1
= 0;int num2
= 0;Node mid
= new Node();for (int i
= 1, j
= length
; i
<= length
/ 2; i
++, j
--) {Node temp
= head
;Node cur
= head
;while (true) {temp
= temp
.next
;num1
++;if (num1
== i
) {num1
= 0;break;}}while (true) {cur
= cur
.next
;num2
++;if (j
== num2
) {num2
= 0;break;}}mid
.sno
= temp
.sno
;mid
.score
= temp
.score
;mid
.data
= temp
.data
;temp
.sno
= cur
.sno
;temp
.score
= cur
.score
;temp
.data
= cur
.data
;cur
.sno
= mid
.sno
;cur
.score
= mid
.score
;cur
.data
= mid
.data
;}Node temp2
= head
.next
;while (temp2
!= null
) {System
.out
.println(temp2
);temp2
= temp2
.next
;}}public static void getReverse2(Node head
) {if (head
.next
== null
) {System
.out
.println("LinkedList is empty!");return;}Node reverseHead
= new Node(0, 0, "");Node cur
= null
;Node temp
= head
.next
;while (temp
!= null
) {cur
= temp
.next
;temp
.next
= reverseHead
.next
;reverseHead
.next
= temp
;temp
= cur
;}head
.next
= reverseHead
.next
;}
class Node {public Node next
;public int sno
;public int score
;public String data
;public Node() {}public Node(int Sno
, int NScore
, String Data
) {this.sno
= Sno
;this.score
= NScore
;this.data
= Data
;}@Overridepublic String
toString() {return "Node{" +"sno=" + sno
+", score=" + score
+", data='" + data
+ '\'' +'}';}
}
class SingleLinkedList {private Node head
= new Node(0, 0, ""); public Node
getNode() {return head
;}public void add(Node node
) { Node temp
= head
;while (temp
.next
!= null
) {temp
= temp
.next
;}temp
.next
= node
;}public void list() { Node temp
= head
.next
;if (temp
== null
) {System
.out
.println("LinkedList is empty!");} else {while (temp
!= null
) {System
.out
.println(temp
);System
.out
.println();temp
= temp
.next
;}}}
}
總結
以上是生活随笔為你收集整理的Java实现单链表的反转的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。