少女122号 2021-03-18 23:39 采纳率: 66.7%
浏览 52

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

#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:

  • 写回答

1条回答 默认 最新

  • cpp_learners 2021-03-19 10:32
    关注

    首先,只会判断链表的第一个值,不再继续判断下一个,是应为内嵌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);
    
    }
    评论

报告相同问题?

悬赏问题

  • ¥15 乘性高斯噪声在深度学习网络中的应用
  • ¥15 运筹学排序问题中的在线排序
  • ¥15 关于docker部署flink集成hadoop的yarn,请教个问题 flink启动yarn-session.sh连不上hadoop,这个整了好几天一直不行,求帮忙看一下怎么解决
  • ¥30 求一段fortran代码用IVF编译运行的结果
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥30 python代码,帮调试,帮帮忙吧