list逆序筆試題

2021-06-07 15:28:48 字數 1152 閱讀 7949

給定一單鏈表的表頭指標和指向其中乙個節點的指標,要求以該指標為頭將原鍊錶逆序排列,例如:

1. n1->n2->n3->n4->n5->null  phead = n1,pstart = n3,返回n3->n2->n1->n5->n4->null

2. n1->n2->n3->n4->n5->null  phead = n1,pstart = n5,返回n5->n4->n3->n2->n1->null

3. n1->n2->n3->n4->n5->null  phead = n1,pstart = n1,返回n1->n5->n4->n3->n2->null

不允許額外分配儲存空間,不允許遞迴,可以使用臨時變數。

很容易想到的做法是先將整個鍊錶逆序,然後將尾節點連線到頭節點,然後再從pstart後面斷開。我是把它分成兩個部分,即包括pstart的前面部分和不包括pstart的後面部分。當pstart和phead重合時,前面一部分只有乙個節點;當pstart是鍊錶的尾節點的時候,後面一部分是空鍊錶。分別逆序完了以後,再連線起來。

前面有道題說了,使用phead和兩個臨時變數就可以將乙個鍊錶逆序,我這裡沒有使用phead,所以用到了三個臨時變數。裡面用的臨時變數比較多,思路不太清晰。

#i nclude 

#i nclude <

string> 

using

namespace std;

struct node

}; //將某個鍊錶逆序

void reserselist(node *& phead, node *& ptail)

node *p2=p1->next;

if(p2==0) 

//首指標的下乙個節點為空,表示只有乙個節點 //

至少有兩個不為空的節點

node *p3=0; 

while(p2!=0)

phead->next=0; 

//將首節點的next置為0,否則會形成迴圈鍊錶

ptail=phead;

phead=p1; }

//分成兩個鍊錶,然後再合併

node * reserse(node * phead, node * pstart)

void output(node * tmp)

cout<<"null"

筆試題 句子逆序與字串逆序

輸入 i love you 輸出 you love i 要求 不能使用核心庫函式實現逆序。思路 進行兩次反轉,第一次每個單詞反轉,第二次整個字串反轉 字串遞迴逆序 private static string recursion string input return recursion input....

list的逆序排列

list.reverse list.reverse 方法,會直接在原來的列表裡面將元素進行逆序排列,不需要建立新的副本用於儲存結果,不需要重新申請空間來儲存最後的結果,但是修改了原來的資料。list 1 python 的列表有乙個特性叫做切片,mylist 會返回 mylist 的副本,當start...

華為筆試題 括號字串逆序展開

給定乙個字串,字串包含數字 大小寫字母以及括號 包括大括號 中括號和小括號 括號可以巢狀,即括號裡面可以出現數字和括號。按照如下的規則對字串進行展開,不需要考慮括號成對不匹配的問題,用例保證括號匹配,同時用例保證每個數字後面都有括號,不用考慮數字後面沒有括號這種情況,即2a2 b 這種情況不用考慮。...