java代碼
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiYWan5Sew92Yf52bjl2LcNHa0FGcjlGcfd3Xw9CXt92YuUWelRXauo2a4ITMvw1LcpDc0RHaiojIsJye.gif)
/**
* @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) {
public node getnextnode() {
return nextnode;
public void setnextnode(node nextnode) {
this.nextnode = nextnode;
* 兩種方式實作單連結清單的反轉(遞歸、普通)
* 新手強烈建議旁邊拿着紙和筆跟着代碼畫圖(便于了解)
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) {
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 = pre;
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();
}