题目描述: 编写代码,以给定值x为基准将链表分割成两部分,所有小于x的结点排在大于或等于x的结点之前
eg: 输入:1,4,5,3,2,2,6 和 3
输出:1,2,2,4,5,3,6
首先上代码:(c语言实现)
pList pListTwoPart(pList *pHead, DataType val)
{
assert(pHead);
pList pTmp = *pHead;//保留上一个节点
pList pCur = (*pHead)->_pNext;//判断节点
while (pCur)//控制循环
{
if ((pCur)->data < val)
{
pTmp->_pNext = pCur->_pNext;//头插
pCur->_pNext = *pHead;
*pHead = pCur;//把当前需返回的链表给*pHead
pCur = pTmp;
pCur = pCur->_pNext;
}
else
{
pTmp = pCur;
pCur = pCur->_pNext;
}
}
return *pHead;
}
解析:该思路的核心思想就是利用头插法,在链表中寻找比基准值小的节点,找到之后将其打断然后把它变成头节点
图解:
pcur>3
pcur>3
pcur>3
pcur<3
就如上图执行完即可
有什么不对地方请指教。