劍指Offer鍊錶分割

2021-10-14 01:37:37 字數 1033 閱讀 6022

現有一鍊錶的頭指標 listnode* phead,給一定值x,編寫一段**將所有小於x的結點排在其餘結點之前,且不能改變原來的資料順序,返回重新排列後的鍊錶的頭指標。

分析

可以新new兩個節點,乙個連線比x值小的節點(before)一顆連線比x大的節點(after)。最後將兩個新的鍊錶一連線即可。

具體如下:

如果cur.calwhile

(cur!=null)

else

}else

else

} cur=cur.next;

}還是之前的問題,我們需要重點考慮

我們有一些特殊的情況:

下面結合理解一下

開始

中間

尾部

**如下:

public

class

partition

listnode cur=phead;

listnode bs=null;

listnode be=null;

listnode as=null;

listnode ae=null;

while

(cur!=null)

else

}else

else

} cur=cur.next;}if

(bs==null)

be.next=as;

if(as!=null)

return bs;

}}

劍指offer 鍊錶

單向鍊錶的結構定義 typedef int datatype struct listnode 問題1 往鍊錶的末尾新增乙個結點 給定頭結點,往末尾插入乙個結點 void insertnode listnode head,datatype key listnode p head while p nex...

劍指offer 鍊錶

鍊錶 鍊錶是一種動態資料結構 struct listnode 往鍊錶的末尾新增乙個節點的c 程式如下 void addtotail listnode phead,int value 注意第乙個引數phead是乙個指向指標的指標。當我們往乙個空鍊錶插入乙個結點時,else pnode m pnext ...

劍指offer 鍊錶

在乙個排序的鍊錶中,存在重複的結點,請刪除該鍊錶中重複的結點,重複的結點不保留,返回煉表頭指標。思路1 遞迴版 class solution 找到當前節點與下乙個節點不重複的點,從不重複的點開始遞迴 return deleteduplication phead next else 思路2 非遞迴版 ...