我想知道是否有人可以指出我如何将一种方式添加到我的函数中,让用户选择在链接列表中的哪个点应该拆分它。目前,我有一个工作得很好,可以将列表分成两半。来了>>>
void split(Node *pOriginal , Node *&pHeadA, Node *&pHeadB){
if(pOriginal ==NULL){
cout<< "No element in list ";
}
else{
pHeadA = pOriginal;
Node *pTemp = pOriginal;
while(pTemp != NULL && pTemp->pNext != NULL && pTemp->pNext->pNext != NULL){
pHeadA=pHeadA->pNext;
pTemp = pTemp->pNext->pNext;
} // ends the while loop
pHeadB = pHeadA->pNext;
pHeadA->pNext = NULL;
pHeadA = pOriginal;
pOriginal = NULL;
} // ends the else
} // ends the split function
im 寻找的目标是添加另一个参数,然后在用户输入时在某个点拆分链表。假设列表1->3->5->7->9->11->13,并且用户决定将列表拆分为5,列表的输出将是
1->3->5
和另一个
7->9->11->13
有人可以阐明我如何将它添加到我现有的功能中。
else
1内的while
循环是您找到要拆分的位置的地方,对吧?
您可以将其替换为不同的代码位,该代码查找具有所需值的节点(或者根据规范查找小于或等于 deisred 值的最后一个节点(。阿拉伯数字
当然,您需要一个参数来指定目标值。
通常,您不希望一个函数同时执行这两种拆分,而是准备单独的函数。3
1在我看来,最好return
if
体内,让其余代码在函数范围内运行,而不是打扰else
,但这是一个美学决定,可能(或可能不会(被您正在使用的编码指南所禁止。(我猜你是为课堂写这个。
2在我看来,这比像你已经做的那样使用双步到大约一半的列表更直接。
3也许叫bisect
和partitionByValue
。什么的。命名很重要。