c语言-C语言将两个递增有序单链表归并为一个降序的单链表,求大侠帮忙看看

问题描述

C语言将两个递增有序单链表归并为一个降序的单链表,求大侠帮忙看看

#include
#include
#define N 8
typedef struct list
{ char c;
struct list *next;
} SLIST;
SLIST *creat(char *a)
{ SLIST *h,*p,*q; int i;
h=p=(SLIST *)malloc(sizeof(SLIST));
for(i=0; i
{ q=(SLIST *)malloc(sizeof(SLIST));
q->c=a[i]; p->next=q; p=q;
}
p->next=0;
return h;
}
void output(SLIST *h)
{ SLIST *p;
p=h->next;
if (p==NULL) printf("nThe list is NULL!n");
else
{ printf("nHead");
while(p->c!=0)
{ printf("->%c",p->c); p=p->next; }
printf("->Endn");
}
}
SLIST *sub(SLIST *a,SLIST *b)
{

SLIST *pa,*pb,*r;

pa=a;

pb=b;

r=NULL; //r为新链表头

while(pa->c!=0&&pb->c!=0)

{

if(pa->c< pb->c)
{

a=a->next;
pa->next=r;
r=pa;
pa=a;

     }
     else
     {
         b=b->next;
         pb->next=r;
         r=pb;
         pb=b;
     }
 }  

  while(pa!=NULL)//如果是表1未完,它的剩余结点倒序插入。
  {      a=a->next;
         pa->next=r;
         r=pa;
         pa=a;
  }
  while(pb!=NULL)
  {
      b=b->next;
      pb->next=r;
      r=pb;
      pb=b;
  }
  r=r->next;
  return(r);

}

void main()
{ SLIST head1,*head2,*head3;
char a[N]="abcdefg";
char b[N]="ABCDEFG";
head1=creat(a);
printf("nThe first list before merging:n");
output(head1);
head2=creat(b);
printf("nThe second list before merging:n");
output(head2);
head3=sub(head1,head2);
printf("nThe list after merging:n");
output(head3);
}
/

1.程序运行结果为:
The first list before merging:

Head->a->b->c->d->e->f->g->End

The second list before merging:

Head->A->B->C->D->E->F->G->End

The list after merging:

Head->g->f->e->d->c->b->a->G->F->E->D->C->B->A->?>蚉ress any key to continue

====C语言将两个递增有序单链表归并为一个降序的单链表,求大侠帮忙看看 程序运行时最后报错,为什么呢?
*/

解决方案

你说最后报错,但是你又不把错误信息贴出来??我一行一行看,怎么知道哪里的问题啊

时间: 2024-10-09 03:01:00

c语言-C语言将两个递增有序单链表归并为一个降序的单链表,求大侠帮忙看看的相关文章

c语言-求大侠帮忙:C语言程序设计---编程题(以下所有题目程序应是非递归的)

问题描述 求大侠帮忙:C语言程序设计---编程题(以下所有题目程序应是非递归的) 编写一个函数insert(s1,s2,ch),实现在字符串s1中的指定字符ch位置处插入字符串s2. 学校工会组织活动,要求有8名教师参加,这8名教师将分别从A学院3名教师.B学院5名教师.C学院6名教师中任意抽取,且其中必须有B学院的教师参加,请编程输出所有可能的方案 已知在C盘根目录下存有文本文件"file1.txt",编程统计文件"file1.txt"中每个字母字符和每个数字字符

c语言-C语言题程序第二个输出结果是124还是125呢?求大侠帮忙解释

问题描述 C语言题程序第二个输出结果是124还是125呢?求大侠帮忙解释 #includeint change(int *data){ return (*data)++;}main(){ int data=123; change(&data); printf(""%ddata); data=change(&data); printf(""%d""data); printf(""n"");}V

c语言-C语言,简单冒泡排序排10个整数,分别按照升序降序输出,请问怎么实现?

问题描述 C语言,简单冒泡排序排10个整数,分别按照升序降序输出,请问怎么实现? C语言,简单冒泡排序排10个整数,分别按照升序降序输出,请问怎么实现? 解决方案 void foo(int * data, int n, int desc) { for (int i = 0; i < n - 1; i++) { for (int j = 0; j < n - i; j++) { if ((data[j + 1] < data[j] && desc) || (data[j +

c语言-C语言冒泡排序的小问题

问题描述 C语言冒泡排序的小问题 void bubblesort(intArr*ia){ int i,j,t,n=ia->cur; for(i=n;i>2;i--) for(j=1;j?if(ia->pt[j]>ia->pt[j-1]){ t=ia->pt[j-1]; ia->pt[j-1]=ia->pt[j]; ia->pt[j]=t; } 上面这段是算法其中的排序部分,对长度为ia->cur的数组排序,结果似乎有点问题,结果后两位有时错位,另

c语言如何实现1到9999递增输出,空白用0占位

问题描述 c语言如何实现1到9999递增输出,空白用0占位 四位,从1到9999递增显示出来,空白的位置用0占位,请大神帮忙,不胜感激 解决方案 int main(void) { for( int i=0;i<10000;i++) { printf("%04d",i) if( (i%50 == 0) && (i!=0) ) printf("n"); } return 0; } 解决方案二: printf("%04d",m);

go语言通过管道连接两个命令行进程的方法_Golang

本文实例讲述了go语言通过管道连接两个命令行进程的方法.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: package main import (   "os"   "os/exec"   "fmt"   "flag"   "strings" ) func main() { generator := exec.Command("cmd1") consumer := exe

探讨:将两个链表非降序合并为一个链表并依然有序的实现方法_C 语言

已知两个链表list1和list,2,各自非降序排列,将它们合并成另外一个链表list3,并且依然有序,要求保留所有节点.实现过程中,list1中的节点和list2中的节点都转移到了list3中,注意泛型的友元函数的用法.程序如有不足之处,还望指正!!!定义List类 复制代码 代码如下: #include "stdafx.h"#include <iostream> using namespace std;template<class T>struct Node

c语言-请问用Python怎么怎们判断两个c文件中的函数是否发生了变更呢?拜求大神!!!!!

问题描述 请问用Python怎么怎们判断两个c文件中的函数是否发生了变更呢?拜求大神!!!!! 用Python读取两个c文件(更改前和更改后),然后判断出文件中的函数是否被更改,若是被更改则返回函数名称,否则返回空.我现在不知道怎么读出从文件中的函数名,跪求大神帮忙!!! 解决方案 如果只是判断文件本身是否更改,可以比较md5,如果判断函数,这个涉及文本比较算法.C文件的函数名可以用正则表达式匹配. 解决方案二: 直接用文本diff类库来获取差别

c语言,形参是指针的引用,和形参是指针,两者结果不同,求指点

问题描述 c语言,形参是指针的引用,和形参是指针,两者结果不同,求指点 自定义的头文件 typedef struct BiTNode { int data; struct BiTNode *lchild, *rchild; }BiTNode, *BiTree; 如下是使用形参是指针的引用的函数,结果是正确的 #include "BiTree.h" #include "stdlib.h" #include "stdio.h" bool Delete