关于单链表拆分大于小于零的问题,不知道为什么只会判断链表的第一个值,不再继续判断,求解答!

#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);

}