單鏈表node的資料結構定義如下:
class把當前鍊錶的下乙個節點pcur插入到頭結點dummy的下乙個節點中,就地反轉。node
public
intgetdata()
public
void setdata(int
data)
public
node getnext()
public
void
setnext(node next)
}
dummy->1->2->3->4->5的就地反轉過程:
pcur是需要反轉的節點。
prev連線下一次需要反轉的節點
反轉節點pcur
糾正頭結點dummy的指向
pcur指向下一次要反轉的節點
偽**
1.就地反轉法
public
node reverselist1(node head)
return
dummy.next;
}新建乙個頭結點,遍歷原鍊錶,把每個節點用頭結點插入到新建鍊錶中。最後,新建的鍊錶就是反轉後的鍊錶。
pcur是要插入到新鍊錶的節點。
pnex是臨時儲存的pcur的next。
pnex儲存下一次要插入的節點
把pcur插入到dummy中
糾正頭結點dummy的指向
pcur指向下一次要插入的節點
偽**
2.新建鍊錶,頭節點插入法
public
node reverselist2(node head)
return
dummy.next;
}測試**:
linklist list4 = new結果:反轉後的鍊錶為:98linklist();
for (int i = 5; i < 10; i++)
linklist list5 = new
linklist();
list5.head =list4.reverselist2(list4.head);
system.out.print("反轉後的鍊錶為:");
system.out.print("\r\n");
list5.print(list5.head);
//從head節點開始遍歷輸出
765**:
單鏈表反轉
單鏈表反轉,可以用迴圈做,當然也可以遞迴 詳見 include includestruct node 3 1 4 6 2 1 1 3 4 6 2 2 4 1 3 6 2 3 6 4 1 3 2 4 2 6 4 1 3 5 迴圈反轉,即依次改動3個指標值,直到鍊錶反轉完成 比如,上面第 1 行到第 2...
反轉單鏈表
include stdafx.h include include using namespace std struct listnode typedef listnode plistnode typedef plistnode list list creatlist return head void...
單鏈表反轉
想起很早以前某次面試,面試官很嚴肅的要求我現場手寫單鏈表反轉的 哥虎軀一震,心想 不就需要要個臨時變數來記錄位址嗎,用得著這樣煞有介事?雖然在那之前我的確沒寫過這個程式,哈哈哈 當時我草草寫了十來行 面試官不等我完成,就直接拿過去開始問問題。不知道是不是因為抗壓能力不足,在面試官的不斷 盤問 下,哥...