劍指offer--面試題16:翻轉連結串列--Java實現
阿新 • • 發佈:2019-02-19
題目描述:
定義一個函式,輸入一個連結串列的頭結點,反轉該連結串列並輸出反轉後連結串列的頭結點。
解題思路:
為了反轉列表,其實就是為了改變next指標,由指向後一個變為指向前一個。
這裡為了避免連結串列斷裂,要儲存三個結點,即當前結點,前一個結點和後一個結點。
程式碼:
public class ReverseListTest {
static class ListNode {
int key;
ListNode next;
}
public static ListNode reverse(ListNode pHead) {
ListNode reverseHead = pHead;
ListNode node = pHead;
ListNode prevNode = null ;
while (node != null) {
ListNode next = node.next;
if (next == null) {
reverseHead = node;
}
node.next = prevNode;
prevNode = node;
node = next;
}
return reverseHead;
}
public static void main(String[] args) {
// 建立一個測試連結串列
ListNode head = new ListNode();
head.key = 0;
ListNode p = head;
for (int i = 1; i < 10; i++) {
ListNode node = new ListNode();
node.key = i;
node.next = null;
p.next = node;
p = node;
}
ListNode pNode = reverse(head);
while (pNode != null){
System.out.println(pNode.key);
pNode = pNode.next;
}
}
}