一道變形的鍊錶反轉題,使用lua實現

2021-09-29 20:54:37 字數 1775 閱讀 4185

給定乙個單鏈表的頭節點 head,實現乙個調整單鏈表的函式,使得每k個節點之間為一組進行逆序,並且從鍊錶的尾部開始組起,頭部剩餘節點數量不夠一組的不需要逆序。(不能使用佇列或者棧作為輔助)

例如:鍊錶:1->2->3->4->5->6->7->8->null, k = 3。那麼 6->7->8,3->4->5,1->2各位一組。調整後:1->2->5->4->3->8->7->6->null。其中 1,2不調整,因為不夠一組。

local t = 

local tt = t;

local max = 8;

while(max > 0) do

local t2 =

tt.next = t2;

tt = t2;

max = max -1;

end

function reverttable( tab,limit )

-- 遞迴拆分子鏈

local temphead = nil;

local temphead2 = nil;

local tempk = 0

function revertsub(nextnode,fathernode)

if nextnode == nil then

return

end

revertsub(nextnode.next,nextnode)

tempk = tempk +1;

-- print(nextnode.data,tempk);

if tempk == limit then

nextnode.next = temphead2

temphead2 = temphead

temphead = nil ;

tempk = 0

elseif tempk == 1 then

temphead = nextnode

nextnode.next = fathernode

else

nextnode.next = fathernode

end

endrevertsub(tab,nil)

if temphead ~= nil then

print('**********')

local max = 10

local tempnext = temphead.next

local tempnext2 = nil

temphead.next = temphead2;

while tempnext and max > 0 do

max = max - 1;

print('2222*****== ',temphead.data)

tempnext2 = tempnext.next

tempnext.next = temphead

temphead = tempnext;

tempnext = tempnext2

end

else

temphead = temphead2

end

return temphead

endlocal head = reverttable(t,3);

local k = 20

while(head and k > 0)

do k = k -1;

print(head.data);

head = head.next;

end

變形的鍊錶反轉

給定乙個單鏈表的頭節點 head,實現乙個調整單鏈表的函式,使得每k個節點之間為一組進行逆序,並且從鍊錶的尾部開始組起,頭部剩餘節點數量不夠一組的不需要逆序。不能使用佇列或者棧作為輔助 例如 鍊錶 1 2 3 4 5 6 7 8 null,k 3。那麼 6 7 8,3 4 5,1 2各位一組。調整後...

鍊錶題目一道

原題鏈結 題意很簡單。給定乙個單鏈表,反轉這個單鏈表,返回翻轉後的頭節點。要將鍊錶翻轉,很容易想到借助棧的後進先出的性質來改變鍊錶的順序。將鍊錶節點順序壓入棧中,鍊錶節點全部進棧以後,取棧頂元素作為新鍊錶的頭節點,然後將元素不斷出棧,每齣棧乙個元素就連線到新鍊錶的末尾。時間複雜度 將鍊錶元素壓入棧中...

鍊錶的游標實現 一道演算法題

輸入包含多組資料。每組資料佔一行,包含不超過100000個字母 下劃線 字元 或 者 其中字元 表示home鍵,表示end鍵。輸入結束標誌為檔案結束符 eof 輸 入檔案不超過5mb。對於每組資料,輸出一行,即螢幕上的悲劇文字。樣例輸入 this is a beiju text 樣例輸出 beiju...