是链表L按元素奇偶分成两个表L1和L2,但是运行后会出现这种情况
//单链表的储存描述
typedef int elementType;
typedef struct slNode {
elementType data;
struct slNode *next;
}node, *linkList;
//初始化链表
void initialList(node **pL)
{
(*pL) = new node;
(*pL)->next = NULL;
}
//打印函数
void print(node** L)
{
node* p;
p = (*L)->next;
while (p)
{
cout << p->data << " ";
p = p->next;
}
cout << endl;
}
//尾插法创建单链表,打印创建结果
void createListR(node*& L)
{
elementType x;
node* u, * R;
L = new node; //申请产生头结点,头指针为L
//或用L=(node*)malloc(sizeof(node));
R = L; //设置尾指针
cout << "请输入链表:(输入-1时结束)" << endl;
cin >> x; //读入键盘输入的第一个数据到变量x
while (x != -1) //输入-1时退出循环
{
u = new node; //申请新结点
u->data = x; //装入数据
u->next = NULL; //新结点next指针置空,或用u->next=R->next;
R->next = u; //将新结点链接到链尾
R = u; //尾指针后移,以指向新的尾结点
cin >> x; //读入下一个键盘输入数据到变量x
}
cout << "您创建的链表为:" << endl;
print(&L); //打印链表
}
//将单链表L中的奇数项和偶数项结点分解开(元素值为奇数、偶数),分别放入新的单链表中,然后原表和新表元素同时输出到屏幕上,以便对照求解结果
void listSeparate(node* L)
{
node* p;
node* L1, * L2, * M, * N, * u, * t;
p = (L)->next;
L1 = (node*)malloc(sizeof(node));
L2 = (node*)malloc(sizeof(node));
M = L1;
N = L2;
//initialList(&L1);
//initialList(&L2);(这里变成注释是原来加上这两个完全打印不出来元素,去掉反而能打印出来半个,但是会发生异常)
while (p != NULL)
{
if (p->data % 2 == 0)
{
u = (node*)malloc(sizeof(node));
u->data = p->data;
u->next = M->next;
M->next = u;
M = u;
}
else
{
t = (node*)malloc(sizeof(node));
t->data = p->data;
t->next = L2->next;
L2->next = t;
L2 = t;
}
p = p->next;
}
print(&L);
cout << "偶数项L1为:" << endl;
print(&L1);
cout<<"奇数项L2为:"<<endl;
print(&L2);
destroyList(&L1);
destroyList(&L2);
}
求帮忙看看是哪里出了问题
调试看下,传进来的 (*L)->next,也就是 p,是不是野指针。
这里没有看到链表构建的代码