精华内容
下载资源
问答
  • 两个有序链表序列合并,已知两个非降序链表序列S1与S2,设计函数构造出S1与S2的并集新非降序链表S3。
  • 两个有序链表合并

    2019-03-14 11:16:17
    两个有序链表合并成一个链表合并后的链表仍然是有序的,依次输出合并后的链表的元素值,并求出第奇数位置元素之和
  • 两个有序链表序列合并 题目描述 已知两个非降序链表序列S1与S2,设计函数构造出S1与S2合并后的新的非降序链表S3。 输入格式: 输入分两行,分别在每行给出由若干个正整数构成的非降序序列,用−1表示序列的结尾(−...

    两个有序链表序列的合并

    题目描述
    已知两个非降序链表序列S1与S2,设计函数构造出S1与S2合并后的新的非降序链表S3。

    输入格式:
    输入分两行,分别在每行给出由若干个正整数构成的非降序序列,用−1表示序列的结尾(−1不属于这个序列)。数字用空格间隔。

    输出格式:
    在一行中输出合并后新的非降序链表,数字间用空格分开,结尾不能有多余空格;若新链表为空,输出NULL。

    输入样例:
    1 3 5 -1
    2 4 6 8 10 -1
    输出样例:
    1 2 3 4 5 6 8 10

    一开始我直接上手做!咔咔咔

    #include<iostream>
    using namespace std;
    int a[1000001],b[1000001];
    int s[2000002];//不知道要多大,我乱设置大小 
    int main()
    {
    	int stop1,stop2;//标志着结束 
    	int j,k=0;
    	int head1=0,head2=0;//标志着...头结点?(应该可以这么叫吧 
    	for(int i=0;i<10001;i++)
    	{
    		cin>>a[i];
    		stop1=i;//标记最尾端 
    		if(a[i]==-1)
    		break;
    	}
    	for(int i=0;i<10001;i++)
    	{
    		cin>>b[i];
    		stop2=i;//也是 
    		if(b[i]==-1)
    		break;
    	}
    	if(a[0]!=-1&&b[0]!=-1)
    	{
    		for(j=1;j<=stop1+stop2;j++)
    		{
    			if(a[head1]<b[head2])
    			{
    				s[k]=a[head1];//小的入到数组s里 
    				k++;
    				head1++;
    			}
    			else
    			{
    				s[k]=b[head2];
    				k++;
    				head2++;
    			}
    			if(head1==stop1||head2==stop2)
    			{
    				break;//又一个数组完了就跳出比较 
    			}
    		}
    		
    		if(j<stop1+stop2)//剩下的那个数组一顿输出就完事了 
    		{
    			if(head1==stop1)
    			{
    				for(int i=head2;i<stop2;i++)
    				{
    					s[k]=b[i];
    					k++;
    				}
    			}
    			else
    			{
    				for(int i=head1;i<stop1;i++)
    				{
    					s[k]=a[i];
    					k++;
    				}
    			}
    		}
    		for(int i=0;i<stop1+stop2;i++)
    		{
    			if(i==stop1+stop2-1)
    			cout<<s[i];
    			else
    			cout<<s[i]<<" ";
    		}
    	}
    	else
    	{
    		cout<<"NULL"<<endl;
    	}
    	return 0;
    }
    

    在PTA上提交部分正确
    非常非常啰嗦,还错了,啧啧啧,好是悲伤呢。

    后来我改了一点,还是错了,害

    #include<iostream>
    using namespace std;
    int a[1000005];
    int b[1000005];
    int s[2000005];//不知道要多大,我乱设置大小 
    int main()
    {
    	int stop1,stop2;//标志着结束 
    	int j,k=0;
    	int head1=0,head2=0;//标志着...头结点?(应该可以这么叫吧 
    	for(int i=0;i<1000005;i++)
    	{
    		cin>>a[i];
    		stop1=i;//标记最尾端 
    		if(a[i]==-1)
    		break;
    	}
    	for(int i=0;i<1000005;i++)
    	{
    		cin>>b[i];
    		stop2=i;//也是 
    		if(b[i]==-1)
    		break;
    	}
    	stop1--;
    	stop2--;
        if(stop1==-1&&stop2==-1)
        {
            cout<<"NULL"<<endl;
        }
        else if(stop1==-1)
        {
        	for(int i=0;i<=stop2;i++)
    		{
    			if(i==stop2)
    			cout<<b[i]<<endl;
    			else
    			cout<<b[i]<<" ";
    		}
    	}
    	else if(stop2==-1)
    	{
    		for(int i=0;i<=stop1;i++)
    		{
    			if(i==stop1)
    			cout<<a[i]<<endl;
    			else
    			cout<<a[i]<<" ";
    		}
    	}
    	else
    	{
    		for(j=0;j<=stop1+stop2+1;j++)
    		{
    			if(a[head1]<b[head2])
    			{
    				s[k]=a[head1];//小的入到数组s里
    				k++;
    				head1++;
    			}
    			else
    			{
    				s[k]=b[head2];
    				k++;
    				head2++;
    			}
    			if(head1==stop1+1||head2==stop2+1)
    			{
    				break;//又一个数组完了就跳出比较 
    			}
    		}
    		if(j<stop1+stop2+1)//剩下的那个数组一顿输出就完事了 
    		{
    			if(head1==stop1+1)
    			{
    				for(int i=head2;i<stop2+1;i++)
    				{
    					s[k]=b[i];
    					k++;
    				}
    			}
    			else
    			{
    				for(int i=head1;i<stop1+1;i++)
    				{
    					s[k]=a[i];
    					k++;
    				}
    			}
    		}
    		for(int i=0;i<stop1+stop2+2;i++)
    		{
    			if(i==stop1+stop2+1)
    			cout<<s[i]<<endl;
    			else
    			cout<<s[i]<<" ";
    		}
    	}
    	return 0;
    }
    

    然后我要开始观摩别人的代码了,然后我观摩了这篇的代码PAT 两个有序链表序列的合并

    展开全文
  • 7-3 两个有序链表序列合并 (15 分)

    千次阅读 2019-06-10 23:12:39
    7-3 两个有序链表序列合并 (15 分)

    7-3 两个有序链表序列的合并 (15 分)
    #include <stdio.h>
    #include <stdlib.h>

    typedef int ElementType;
    typedef struct Node *PtrToNode;
    struct Node {
    ElementType Data;
    PtrToNode Next;
    };
    typedef PtrToNode List;

    List Read(); /* 细节在此不表 /
    void Print( List L ); /
    细节在此不表;空链表将输出NULL */

    List Merge( List L1, List L2 );

    int main()
    {
    List L1, L2, L;
    L1 = Read();
    L2 = Read();
    L = Merge(L1, L2);
    Print(L);
    Print(L1);
    Print(L2);
    return 0;
    }

    
    List Merge( List L1, List L2 ){
    	List L,p,q,r;
    	L=(List)malloc(sizeof(struct Node));	//新建一个结点
    	p=L1->Next;	//p指向L1最小值
    	q=L2->Next;	//q指向L2最小值
    	L->Next=NULL;
    	r=L;		//r指向L
    	while(p!=NULL&&q!=NULL)	//p、q都不空,选取p、q所指结点较小者插入L的尾部
    	{
    		if(p->Data<=q->Data){
    			r->Next=p;
    			p=p->Next;
    			r=r->Next;
    		}else{
    			r->Next=q;
    			q=q->Next;
    			r=r->Next;
    		}
    	}
    	if(p!=NULL) r->Next=p;
    	if(q!=NULL) r->Next=q;
    	L1->Next=NULL;
    	L2->Next=NULL;
    	return L;
    }
    
    展开全文
  • 附加1 两个有序链表序列合并 (20 分) 已知两个非降序链表序列S1与S2,设计函数构造出S1与S2合并后的新的非降序链表S3。 输入格式: 输入分两行,分别在每行给出由若干个正整数构成的非降序序列,用−1表示序列的...

    附加1 两个有序链表序列的合并 (20 分)
    已知两个非降序链表序列S1与S2,设计函数构造出S1与S2合并后的新的非降序链表S3。

    输入格式:
    输入分两行,分别在每行给出由若干个正整数构成的非降序序列,用−1表示序列的结尾(−1不属于这个序列)。数字用空格间隔。

    输出格式:
    在一行中输出合并后新的非降序链表,数字间用空格分开,结尾不能有多余空格;若新链表为空,输出NULL。

    输入样例:

    1 3 5 -1
    2 4 6 8 10 -1
    结尾无空行

    输出样例:

    1 2 3 4 5 6 8 10
    结尾无空行

    思路:

    两链表都是递增序列,在循环里面一个个比较,新建一个链表用来储存比较的结果数据

    代码:

    #include <stdio.h>
    #include <stdlib.h>
    struct node{
        int data;
        struct node *next;
    };
    struct node *MakeList(){
        struct node *head, *p, *tail;
        head = (struct node*) malloc(sizeof(struct node));
        tail = head;
        while (1){
            p = (struct node*) malloc(sizeof(struct node));
            scanf("%d", &p->data);
            if(p->data == -1) break;
            tail->next = p;
            tail = p;
        }
        tail->next = NULL;
        return head->next;
    }
    
    struct node *Combine(struct node *p1, struct node *p2){
        struct node *head, *p, *tail;
        head = (struct node*) malloc(sizeof(struct node));
        tail = head;
        tail->next = NULL;
    
        while (p1 && p2){
            p = (struct node*) malloc(sizeof(struct node));
            if(p1->data <= p2->data){
                p->data = p1->data;
                p1 = p1->next;
            }else{
                p->data = p2->data;
                p2 = p2->next;
            }
            tail->next = p;
            tail = p;
        }
        if(p2) p1 = p2;
        tail->next = p1;
    
        return head;
    }
    
    void PrintN(struct node *p){
        if(p->next == NULL){
            printf("NULL");
        } else{
            p = p->next;
            while (p){
                if(p->next == NULL) printf("%d", p->data);
                else printf("%d ", p->data);
                p = p->next;
            }
        }
    }
    int main(){
        struct node *p1, *p2, *p;
        p1 = MakeList();
        p2 = MakeList();
        p = Combine(p1, p2);
        PrintN(p);
        return 0;
    }
    
    展开全文
  • 本题要求实现一个函数,将两个链表表示的递增整数序列合并为一个非递减的整数序列。 函数接口定义: List Merge( List L1, List L2 ); 其中List结构定义如下: typedef struct Node *PtrToNode; struct Node ...

    课程:数据结构陈越何钦铭


    本题要求实现一个函数,将两个链表表示的递增整数序列合并为一个非递减的整数序列。

    函数接口定义:

    List Merge( List L1, List L2 );
    

    其中List结构定义如下:

    typedef struct Node *PtrToNode;
    struct Node {
        ElementType Data; /* 存储结点数据 */
        PtrToNode   Next; /* 指向下一个结点的指针 */
    };
    typedef PtrToNode List; /* 定义单链表类型 */
    

    L1L2是给定的带头结点的单链表,其结点存储的数据是递增有序的;函数Merge要将L1L2合并为一个非递减的整数序列。应直接使用原序列中的结点,返回归并后的带头结点的链表头指针。

    裁判测试程序样例:

    #include <stdio.h>
    #include <stdlib.h>
    
    typedef int ElementType;
    typedef struct Node *PtrToNode;
    struct Node {
        ElementType Data;
        PtrToNode   Next;
    };
    typedef PtrToNode List;
    
    List Read(); /* 细节在此不表 */
    void Print( List L ); /* 细节在此不表;空链表将输出NULL */
    
    List Merge( List L1, List L2 );
    
    int main()
    {
        List L1, L2, L;
        L1 = Read();
        L2 = Read();
        L = Merge(L1, L2);
        Print(L);
        Print(L1);
        Print(L2);
        return 0;
    }
    
    /* 你的代码将被嵌在这里 */
    

    输入样例:

    3
    1 3 5
    5
    2 4 6 8 10
    

    输出样例:

    1 2 3 4 5 6 8 10 
    NULL
    NULL

    代码实现:

    #include <stdio.h>
    #include <stdlib.h>
    
    typedef int ElementType;
    typedef struct Node *PtrToNode;
    struct Node {
        ElementType Data;
        PtrToNode   Next;
    };
    typedef PtrToNode List;
    
    List Read(); 
    void Print( List L ); 
    List Merge( List L1, List L2 );
    
    int main()
    {
        List L1, L2, L;
        L1 = Read();
        L2 = Read();
        L = Merge(L1, L2);
        Print(L);
        Print(L1);
        Print(L2);
        return 0;
    }
    
    /* 你的代码将被嵌在这里 */
    List Merge( List L1, List L2 ){
        PtrToNode p, q, tail, head;
        p = L1->Next;
        q = L2->Next;
        head = (PtrToNode)malloc(sizeof(struct Node));//新链表的头结点
        head->Next = NULL;
        tail = head;
    	while( p!=NULL && q!=NULL ){
            if(p->Data < q->Data){
                tail->Next = p;
                tail = p;
                p = p->Next;
            }
            else{
                tail->Next = q;
                tail = q;
                q = q->Next;
            }
        }
        while(p){
            tail->Next = p;
            tail = p;
            p = p->Next;
        }
        while(q){
            tail->Next = q;
            tail = q;
            q = q->Next;
        }
        L1->Next = NULL;
        L2->Next = NULL;
        return head;
    }
    
    List Read(){
        int n;
        scanf("%d",&n);
        PtrToNode head, tail;
        head = (PtrToNode)malloc(sizeof(struct Node));
        head->Next = NULL;
        tail = head;
        while(n--){
            PtrToNode p = (PtrToNode)malloc(sizeof(struct Node));
            scanf("%d", &p->Data);
            p->Next = NULL;
            tail->Next = p;
            tail = p;
        }
        return head;
    }
    
    void Print( List L ){
        PtrToNode p = L->Next;
        if(p == NULL){
            printf("NULL");
        }
        else{
            while(p){
                printf("%d", p->Data);
                p = p->Next;
                if(p){
                    printf(" ");
                }
            }
        }
        printf("\n");
    }
    

     

    展开全文
  • 题目:本题要求实现一个函数,将两个链表表示的递增整数序列合并为一个非递减的整数序列。 裁判测试程序样例: #include <stdio.h> #include <stdlib.h> typedef int ElementType; typedef struct...
  • 已知两个非降序链表序列S1与S2,设计函数构造出S1与S2合并后的新的非降序链表S3。 输入格式: 输入分两行,分别在每行给出由若干个正整数构成的非降序序列,用−1表示序列的结尾(−1不属于这个序列)。数字用空格...
  • 题目要求实现一个函数,将两个链表表示的递增整数序列合并为一个非递减的整数序列。这道题较为基础,主要考察C语言中链表的基本操作。只要会“连接”链表,考虑清楚比较过程和前后关系不难想出思路,关键是对链表的...
  • 7-1 两个有序链表序列合并 (100 分) 已知两个非降序链表序列S1与S2,设计函数构造出S1与S2合并后的新的非降序链表S3。 输入格式: 输入分两行,分别在每行给出由若干个正整数构成的非降序序列,用−1表示序列的结尾...
  • 02-线性结构1 两个有序链表序列的合并 (15 分) 本题要求实现一个函数,将两个链表表示的递增整数序列合并为一个非递减的整数序列。 函数接口定义: List Merge( List L1, List L2 ); 其中List结构定义如下: ...
  • 已知两个非降序链表序列S1与S2,设计函数构造出S1与S2合并后的新的非降序链表S3。输入格式:输入分两行,分别在每行给出由若干个正整数构成的非降序序列,用−1表示序列的结尾(−1不属于这个序列)。数字用空格间隔。...
  • 6-44 两个有序链表序列合并 (10分) 裁判测试程序样例: #include <stdio.h> #include <stdlib.h> typedef int ElementType; typedef struct Node *PtrToNode; struct Node { ElementType Data; ...
  • 本题要求实现一个函数,将两个链表表示的递增整数序列合并为一个非递减的整数序列。 函数接口定义: List Merge( List L1, List L2 ); 其中List结构定义如下: typedef struct Node PtrToNode; struct Node { ...
  • 6-6 两个有序链表序列合并 (15 分)

    千次阅读 2019-10-06 20:45:05
    链表将输出NULL (同上)*/ List Merge( List L1, List L2 ); int main() { List L1, L2, L; L1 = Read(); L2 = Read(); L = Merge(L1, L2); Print(L); Print(L1); Print(L2); return 0; } /* 你的...
  • 7-1 两个有序链表序列合并 (20 分)已知两个非降序链表序列S1与S2,设计函数构造出S1与S2合并后的新的非降序链表S3。 输入格式: 输入分两行,分别在每行给出由若干个正整数构成的非降序序列,用−1表示序列的结尾...
  • 两个有序链表序列合并题目答案注意 题目 答案 #include<stdio.h> #include<malloc.h> struct Array{ int data; struct Array *next; }; int main() { struct Array *head,*head1,*pa,*pb,*head2,*...
  • 链表将输出NULL */ //自己写了一 void Print( List L){ if(L->Next==NULL){ printf("NULL\n"); return ; } List temp = L->Next; while(temp){ printf("%d ",temp->Data); temp = temp->Next; } ...
  • 6-6 两个有序链表序列合并 (15分)

    千次阅读 2020-03-05 17:50:44
    本题要求实现一个函数,将两个链表表示的递增整数序列合并为一个非递减的整数序列。 函数接口定义: List Merge( List L1, List L2 ); 其中List结构定义如下: typedef struct Node *PtrToNode; struct Node ...
  • 7-3 两个有序链表序列合并 (25 分) 已知两个非降序链表序列S1与S2,设计函数构造出S1与S2合并后的新的非降序链表S3。 输入格式: 输入分两行,分别在每行给出由若干个正整数构成的非降序序列,用−1表示序列的结尾...
  • 7-1两个有序链表序列合并(20分) 已知两个非降序链表序列S1与S2,设计函数构造出S1与S2合并后的新的非降序链表S3。 输入格式: 输入分两行,分别在每行给出由若干个正整数构成的非降序序列,用−1表示序列的结尾...
  • 但是需要开辟一空间用来存放新的链表的头结点 { if(p1->Data<p2->Data){ p->Next=p1; p=p->Next; p1=p1->Next; //p->Next=Null; } else{ p->Next=p2; p=p->Next; // p->Next=NULL; p2=p2->Next; } } if(p1==NULL)/...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 21,211
精华内容 8,484
关键字:

两个有序链表序列的合并