链表的拆分

来源:百度知道 编辑:UC知道 时间:2024/06/04 17:29:27
把一个链表中相同的元素放到新的链表中!
使一个链表变成多个含有相同元素的链表!
例如:链表(一):1,2,3,2,1,2,3,1.
变成链表(1):1,1,1.
链表(2):2,2,2.
链表(3):3,3.

怎么能变成上述的样子??
请在程序上表明中文注释!~
谢谢!~

#include <iostream>
#include <vector>
using namespace std;

typedef struct node {
int value;
struct node *next;
} node;

void divide(node *list, vector<node *>& new_list)
{
node *p = list; //p从链表头移动到链表尾
while (p)
{
int i;
for (i = 0; i < new_list.size(); i++)
if (new_list[i]->value == p->value) //检查这个value以前是否遇到过
break;
if (i < new_list.size()) { //如果遇到过,就插入到相应的新链表中
node *q = p->next;
p->next = new_list[i];
p = q;
}
else { //如果没有遇到过,就新添一个链表
node *q = p->next;
p->next = NULL;
new_list.push_back(p);
p = q;
}
}
}

node *list 传入
vector<node *>& new_list 传出