用了兩種方式,遞迴和非遞迴的方式。
1)定義資料結構
class node
public int getrecord()
public void setrecord(int record)
public node getnextnode()
public void setnextnode(node nextnode)
}
2.進行鍊錶反轉
public class reversesinglelist
node reversedhead = reverse(head.getnextnode());//反轉後序結點
head.getnextnode().setnextnode(head);
head.setnextnode(null);
return reversedhead;
}
/**
* 遍歷,將當前節點的下乙個節點快取後更改當前節點指標
*
*/
public static node reverse2(node head)
node pre = head;
node cur = head.getnextnode();
node next;
while (null != cur)
//將原鍊錶的頭節點的下乙個節點置為null,再將反轉後的頭節點賦給head
head.setnextnode(null);
head = pre;
return head;
}
public static void main(string args) else
cur = tmp;
}
//列印反轉前的鍊錶
node h = head;
while (null != h)
//呼叫反轉方法
head = reverse2(head);
system.out.println("\n**************************");
//列印反轉後的結果
while (null != head)
}
}
自己動手實現鍊錶的反轉
package com.sxt.service;
public class leireverselist
} public static node reversenode(node n)
node sublist=reversenode(n.getnextnode());//將後面的子鍊錶進行反轉
n.getnextnode().setnextnode(n);
n.setnextnode(null);//n在反轉之後總是在末尾 所以將其後續的結點賦值為空
return sublist;
} public static node reversenode2(node n)//非遞迴方式記性遍歷
node pre=n;//用來儲存反轉之後的內容
node curr=n.getnextnode();//要反轉的當前位置
while(curr!=null)
n.setnextnode(null);//此時原來的頭結點已經放到最後的位置
return pre;//真正的頭結點改為當前節點
} public static void main(string args) else
}iteratorlst(head);
system.out.println();
head=reversenode2(head);
iteratorlst(head); }}
資料結構之鍊錶反轉
鍊錶分為單向鍊錶和雙向鍊錶,無論是哪一種鍊錶,反轉都是類似的,區別主要是雙向將當前節點的last節點指向next節點。鍊錶反轉要注意的就是找到當前節點時,在進行反轉前,找到當前節點的上乙個節點和下乙個節點,這樣才能保證每一次的反轉後可以移動到下乙個節點並繼續進行操作。public class nod...
LeetCode 資料結構 反轉鍊錶
首先看題目 反轉乙個單鏈表。示例 輸入 1 2 3 4 5 null 輸出 5 4 3 2 1 null高階 你可以迭代或遞迴地反轉鍊錶。你能否用兩種方法解決這道題?先不管什麼高階,不管黑貓白貓,只要能抓到耗子就是好貓。我們就是用最笨的方法也得把這道題給解決嘍。解決思路 首先明白我們要幹啥,反轉鍊錶...
資料結構264 反轉鍊錶
輸入乙個鍊錶,反轉鍊錶後,輸出鍊錶的所有元素。輸入第一行為整數n n 1 代表測試鍊錶數。從第二行開始每行表示乙個鍊錶,其中第乙個資料表示鍊錶中資料個數,其餘資料表示要測試的鍊錶中的資料,均為整數。每一行對應乙個鍊錶反轉後的元素。35 1 2 3 4 5 3 2 4 5 1 35 4 3 2 1 5...