#include<iostream>
using namespace std;
typedef struct LNode
{
int data;
struct LNode *next;
} LNode,*linklist;
void double1(linklist &L)
{ linklist p,q1,q2,r1,r2;
linklist r;
int n;
L=new LNode;
L->next=NULL;
r=L;
//cout<<endl;
cout<<"请输入链表长度:";
cin>>n;
cout<<"请输入"<<n<<"个数(同时带有正整数和负整数):";
for(int i=0;i<n;i++)
{ p=new LNode;
cin>>p->data;
p->next=NULL;
r->next=p;
r=p;
cout<<p->data<<" ";
}
p=L->next;
for(int i=0;i<n;i++)
{
if(p->data>0)
{ {
q1=new LNode;
q1->next=NULL;
// r1->next=q1;
r1=q1; //r1是尾指针
cout<<"正数链表:";
//for(i=0;i<n;i++){
for(i=0;i<n;++i)
{
r1->next=p;
r1=p;
// q1=L->next;
p=L->next;
cout<<r1->data<<" ";
}
}
}
else{ {
q2=new LNode;
q2->next=NULL;
// r1->next=q1;
r2=q2; //r2也是尾指针
cout<<"负数链表:";
//for(i=0;i<n;i++){
for(i=0;i<n;i++)
{
r2->next=p;
r2=p;
//q2=L->next;
p=L->next;
cout<<r2->data<<" ";
}
}
}
}}
int main(){
linklist L;
double1(L);
}
运行结果如下(只是对第一个数值进行乐判断,之后的数值并没有判断),求各位大佬解答,谢谢!
题目要求:
创建一个任意数值的单链表,拆分成两个链表,分别为大于0和小于0:
首先,只会判断链表的第一个值,不再继续判断下一个,是应为内嵌for(i=0;i<n;++i)中,执行完后i已经是3了,所以导致外循环直接退出。
其次,你这样的写法会有问题,我也不知道该怎么改。。。
最后,给你写了一个较好理解的版本。
#include<iostream>
using namespace std;
typedef struct LNode {
int data;
struct LNode *next;
} LNode, *linklist;
void double1(linklist &L) {
linklist p, q1, q2, r1, r2;
linklist r;
int n;
L = new LNode;
L->next = NULL;
r = L;
//cout<<endl;
cout << "请输入链表长度:";
cin >> n;
cout << "请输入" << n << "个数(同时带有正整数和负整数):";
for (int i = 0; i < n; i++) {
p = new LNode;
cin >> p->data;
p->next = NULL;
r->next = p;
r = p;
cout << p->data << " ";
}
p = L->next;
//for (int i = 0; i < n; i++) {
// if (p->data > 0) {
// {
// q1 = new LNode;
// q1->next = NULL;
// // r1->next=q1;
// r1 = q1; //r1是尾指针
// cout << "正数链表:";
// //for(i=0;i<n;i++){
// for (int ii = 0; ii < n; ++ii) {
// r1->next = p;
// r1 = p;
// // q1=L->next;
// p = L->next;
// cout << r1->data << " ";
// }
// }
// } else {
// {
// q2 = new LNode;
// q2->next = NULL;
// // r1->next=q1;
// r2 = q2; //r2也是尾指针
// cout << "负数链表:";
// //for(i=0;i<n;i++){
// for (int ii = 0; ii < n; ii++) {
// r2->next = p;
// r2 = p;
// //q2=L->next;
// p = L->next;
// cout << r2->data << " ";
// }
// }
// }
//}
r1 = NULL; // 永远指向正数链表第一个节点
q1 = NULL; // 永远指向负数链表第一个节点
while (p != NULL) {
if (p->data > 0) {
if (r1 == NULL) {
r1 = new LNode;
r1->data = p->data;
r1->next = NULL;
p = p->next; // p指向下一个节点
continue;
}
r2 = r1;
while (r2->next != NULL) r2 = r2->next; // r2指向最后一个节点
linklist n = new LNode; // 新建节点存储当前p节点数据
n->data = p->data;
n->next = NULL;
r2->next = n; // 正数最后一个节点指向他
} else {
if (q1 == NULL) {
q1 = new LNode;
q1->data = p->data;
q1->next = NULL;
p = p->next;
continue;
}
q2 = q1;
while (q2->next != NULL) q2 = q2->next; // 指向最后一个节点
linklist n = new LNode;
n->data = p->data;
n->next = NULL;
q2->next = n;
}
p = p->next;
}
cout << endl;
cout << "正数链表:";
while (r1 != NULL) {
cout << r1->data << " ";
r1 = r1->next;
}
cout << endl;
cout << "负数链表:";
while (q1 != NULL) {
cout << q1->data << " ";
q1 = q1->next;
}
cout << endl;
}
int main() {
linklist L;
double1(L);
}