劍指offer 06 從尾到頭列印單鏈表

2021-10-18 22:31:48 字數 1890 閱讀 8508

輸入乙個鍊錶的頭節點,從尾到頭反過來返回每個節點的值(用陣列返回)。

示例 1:

輸入:head = [1,3,2] 輸出:[2,3,1]

單鏈表結構如下:

struct listnode 

;

解法一:時間複雜度和空間複雜度都為o(n)。

不用修改鍊錶的結構。

先計算出煉表中的結點個數,然後開闢乙個和鍊錶節點個數相同的陣列空間,將鍊錶中每個結點的資料域的值放到陣列中然後再將陣列的位址返回即可。

c語言**如下:

int

*reverseprint

(struct listnode* head,

int* returnsize)

int*arr=

(int*)

malloc

(sizeof

(int

)*count)

;for

(i=0

;i) i-=1

; p=head;

while

(p)*returnsize=count;

return arr;

}

c++**如下:

class

solution

reverse

(nums.

begin()

, nums.

end())

;return nums;}}

;

解法二:時間複雜度和空間複雜度都為o(n).

這種方法需要將單鏈表逆置修改了單鏈表原來的結構。

如果在面試中我們需要向面試官詢問清楚是否允許我們修改原來的鍊錶結構,根據要求選擇合適的解題方法。

呼叫將單鏈表逆置的函式,然後將新的鍊錶從頭到尾列印其資料域的值即可。

struct listnode*

reverse

(struct listnode* head)

return q;

}int

*reverseprint

(struct listnode* head,

int* returnsize)

*returnsize=count;

int*arr=

(int*)

malloc

(sizeof

(int

)*count)

;for

(i=0

;i) i=0;

p=reverse

(head)

;while

(p)return arr;

}

解法三:還可以使用stl中的棧(利用其先進後出的特點)來解決,但和上面兩種方法一樣都時間和空間複雜度都為o(n)。

class

solution

while

(!st.

empty()

)return res;}}

;

解法四:遞迴

class

solution

};

void

reverseprint

(listnode* head)

cout<>val<<

" ";

}}

劍指offer06 從尾到頭列印鍊錶

題目 從尾到頭列印鍊錶 思路 1,注意傳入函式的是指向煉表頭的指標,在函式中不應該直接使用這個指標,而是應該用乙個指標的臨時變數來遍歷鍊錶 2,方法一 使用棧來實現 3,方法二 遞迴在本質上就是乙個棧結構,所以也可以用遞迴來實現 solution include include include us...

劍指offer 06 從尾到頭列印鍊錶

輸入乙個鍊錶的頭節點,從尾到頭反過來返回每個節點的值 用陣列返回 示例 1 輸入 head 1,3,2 輸出 2,3,1 限制 0 鍊錶長度 10000 鍊錶特點 只能從前至後訪問每個節點。題目要求 倒序輸出節點值。這種先入後出的需求可以借助棧來實現。通過linkedlist類來實現棧 入棧 遍歷鍊...

劍指 Offer 06 從尾到頭列印鍊錶

題目描述 輸入乙個鍊錶的頭節點,從尾到頭反過來返回每個節點的值 用陣列返回 解題思路 1 在不允許修改鍊錶的結構的條件下,採用棧輔助 2 新建乙個棧,stackstack new stack 將鍊錶的節點依次壓入棧中 新開乙個陣列,int print new int size 用來儲存從棧中彈出的值...