拆分单链表
Splitting Singly Linked List
我正试图将一个单链表拆分为2个单链表。L1将获得l的30%的成员,l2将获得l的30%的成员。
#include <iostream>
using namespace std;
struct Node{
int data;
Node* pNext;
};
struct List{
Node* pHead, *pTail;
};
void CreateList(List &l){
l.pHead=l.pTail=NULL;
}
int Count(List l){
int i=0;
Node*p=l.pHead;
while (p){
i++;
p=p->pNext;
}
return i;
}
void RemoveList(List &l){
Node *p;
while (l.pHead){
p=l.pHead;
l.pHead=p->pNext;
delete p;
}
}
void Patition(List &l, List &l1, List &l2){
int t=Count(l)*0.3;
cout<<"t="<<t<<endl;
CreateList(l1);
CreateList(l2);
Node *p=l.pHead;
l1.pHead=p;
for (int i=0;i<t;i++)
p=p->pNext;
l1.pTail=p;
l.pHead=p->pNext;
p=l.pHead;
l2.pHead=p;
for (int i=0;i<t;i++)
p=p->pNext;
l2.pTail=p;
l.pHead=p->pNext;
RemoveList(l);
}
我使用下面的代码来测试你的函数:
int _tmain(int argc, _TCHAR* argv[])
{
List l;
CreateList(l);
l.pHead = new Node;
l.pHead->pNext = l.pTail;
Node *iterator = l.pHead;
// Initial linked list
for (int i = 0; i < 10; i++) {
Node *newNode = new Node;
newNode->pNext = iterator->pNext;
iterator->data = i;
iterator->pNext = newNode;
iterator = newNode;
}
List l1, l2;
Patition(l, l1, l2);
cout << Count(l);
cout << Count(l1);
cout << Count(l2);
return 0;
}
我发现的是,在你的Count函数中,你的结束条件是当p
是NULL时,但是在你的配分函数中,你不让你的链表更新,结束指向NULL。
我如何纠正这个问题是简单地修改你的配分函数为
void Patition(List &l, List &l1, List &l2){
int t = Count(l)*0.3;
cout << "t=" << t << endl;
CreateList(l1);
CreateList(l2);
Node *p = l.pHead;
l1.pHead = p;
for (int i = 0; i<t; i++)
p = p->pNext;
// Change
l.pHead = p->pNext;
p->pNext = l1.pTail;
//
p = l.pHead;
l2.pHead = p;
for (int i = 0; i<t; i++)
p = p->pNext;
// Change
l.pHead = p->pNext;
p->pNext = l2.pTail;
//
RemoveList(l);
}
这将保持每个链表的尾部指向pTail,而不会跳过原始链表中的任何节点。
相关文章:
- 如何找到2个单链表的公共节点
- 对单链表的混淆
- 编写一个函数来删除单链表中的节点(尾部除外),仅授予对该节点的访问权限
- 在单链表前面添加一个节点后,我无法遍历每个节点
- 具有完整五法则的简单链表
- 在 C++ 中实现简单链表时出现问题,没有输出
- 在析构函数中删除单链表的正确方法是什么?
- 移动语义 c++ 单链表
- 单链表时间
- 带有unique_ptr的通用单链表,MS visual studio C++中存在未知错误
- 使用 std::unique_ptr 的通用单链表,Visual Studio C++ Microsoft中存在未知的反
- 删除单链表列表
- 在单链表中的后端插入节点
- 合并单链表上的排序
- 简单链表与下一个>下一个交换
- 我试图键入一个函数来在单链表的末尾添加一个节点,但不起作用
- 单链表分配问题 (nullptr)
- 如何将单链表更改为双链表
- 如何制作一个函数,只需更改链接即可交换单链表中的两个相邻元素
- 从单链表到双链表的变化