鍊錶反**
建立乙個新的鍊錶,遍歷舊的鍊錶,每取出來乙個資料就按照頭插法的方式插入行的鍊錶。
直接在此鍊錶上操作,完成鍊錶的反轉。其實也是按照頭插法來加入節點的,先定義乙個輔助指標,指向第乙個節點,然後將頭結點的next置為空,最後用輔助指標遍歷鍊錶,每取出乙個元素就按頭插法鏈結到head。
我採用的是第一種方式。
**如下:
package com.guigu.linkedlistdemo;
public
class
reverselinkedlistdemo
// 反轉單鏈表,頭插法
public
static linkedlist reverselinkedlist
(linkedlist list)
// 建立乙個新的鍊錶
linkedlist newlist =
newlinkedlist()
; hnode cur = list.head.next;
// 讓cur指向鍊錶的第乙個節點
hnode temp = null;
// 輔助變數
// 遍歷舊鍊錶
while
(true
) temp = cur;
cur = cur.next;
// cur後移
// 根據頭插法插入節點
temp.next = newlist.head.next;
newlist.head.next = temp;
}return newlist;}}
// 定義乙個鍊錶類
class
linkedlist
public
void
add(hnode hnode)
// 定義乙個輔助接點
hnode temp = head;
boolean isflag =
false
;// 用來標明該節點是否已在鍊錶中存在
while
(true)if
(temp.next.no > hnode.no)
if(temp.next.no == hnode.no)
temp = temp.next;
// temp往後移}if
(isflag)
else
}// 遍歷鍊錶
public
void
list()
hnode cur = head.next;
// 輔助變數
while
(true
) cur = cur.next;
// cur後移}}
}// 定義乙個英雄的實現類即鍊錶的節點
class
hnode
@override
public string tostring()
}
執行截圖:
面試題 單鏈表反轉
問題 定義乙個函式,輸入乙個鍊錶的頭結點,反轉該鍊錶並輸出反轉後鍊錶的頭結點。一 非遞迴演算法 假設有鍊錶a b c d e f g。在反轉鍊錶過程中的某一階段,其鍊錶指標指向為 a b c d e f g。也就是說在結點d之前的所有結點都已經反轉,而結點d後面的結點e開始的所有結點都沒有反轉。這樣...
鏈表面試題 反轉單鏈表
反轉乙個單鏈表。示例 輸入 1 2 3 4 5 null 輸出 5 4 3 2 1 null解決方案 頭插法開闢新鍊錶並逐個讀取舊鍊錶,頭插進新鍊錶,這樣新的鍊錶與原鍊錶的結構就是反的,需要借助輔助空間 definition for singly linked list.struct listnod...
開心IT面試題 單鏈表排序 反轉
一 單鏈表排序 仿照基於陣列的氣泡排序演算法 node sorting linklist node node node result int temp 0 int len length linklist node result node for int j 0 j len j result resu...