給定一單鏈表的表頭指標和指向其中乙個節點的指標,要求以該指標為頭將原鍊錶逆序排列,例如:
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.reverse list.reverse 方法,會直接在原來的列表裡面將元素進行逆序排列,不需要建立新的副本用於儲存結果,不需要重新申請空間來儲存最後的結果,但是修改了原來的資料。list 1 python 的列表有乙個特性叫做切片,mylist 會返回 mylist 的副本,當start... 給定乙個字串,字串包含數字 大小寫字母以及括號 包括大括號 中括號和小括號 括號可以巢狀,即括號裡面可以出現數字和括號。按照如下的規則對字串進行展開,不需要考慮括號成對不匹配的問題,用例保證括號匹配,同時用例保證每個數字後面都有括號,不用考慮數字後面沒有括號這種情況,即2a2 b 這種情況不用考慮。...筆試題 句子逆序與字串逆序
list的逆序排列
華為筆試題 括號字串逆序展開