將給定的單鏈表 l l: l0→l1→…→ln−1→lnl0→l1→…→ln−1→ln
重新排序為:l0→ln→l1→ln−1→l2→ln−2→…l0→ln→l1→ln−1→l2→ln−2→…
要求使用原地演算法,不能改變節點內部的值,需要對實際的節點進行交換。
例如:對於給定的單鏈表,將其重新排序為.
package main
import . "nc_tools"
/* * type listnode struct
*//**
* * @param head listnode類
* @return void
*/func reorderlist( head *listnode )
node := head
fastnode := head.next
for fastnode != nil && fastnode.next != nil
mid := node.next
node.next = nil
//反轉後半部鍊錶
var pre *listnode
for mid != nil
//合併兩部分鍊錶
node = head
for node != nil && pre != nil
}
鍊錶的複習 頭插與尾插有頭鍊錶
此文章用於大一c語言的鍊錶複習 這裡就不再上鍊表官方定義了,直接說我對鍊錶的理解。鍊錶相當於記憶體中一系列不連續的位址通過指標相互聯絡在一起,它需要通過結構體來實現,同時引入了節點的概念,即以前我們通過乙個變數來儲存資料,現在在鍊錶中用節點來儲存資料,因為在鍊錶中,乙個資料總伴隨著乙個指向下乙個資料...
鍊錶操作 頭插法尾插法
單鏈表的插入操作,包括頭插和尾插,兩種的時間複雜度都為o n 單鏈表插入操作 頭插 尾插 include include using namespace std 定義結點資料型別 typedef int elemtype 結點定義 typedef struct lnode lnode,linklis...
頭插法 尾插法建立鍊錶
鍊錶是線性表的一種,一般來說鍊錶就是一系列的儲存資料元素的單元通過指標串接起來形成的,常見的鍊錶是單鏈表和雙鏈表,乙個域用於資料元素的儲存,另乙個或兩個域是指向其他單元的指標。對於單鏈表來說,指標域是乙個,指向當前節點的後繼節點 雙鏈表來說,乙個指標域指向當前節點的後繼節點,另外乙個指標域指向當前節...