C语言 链表合并并排序

Python020

C语言 链表合并并排序,第1张

/**********start**********//以下是伪代码,有些变量需要定义

if(heada->num

<=

headb->num)//判断第一个节点是在a还是b上,小的作为新链表的头结点,然后设置指示指针pa,pb,p分别在a链表,b链表,新链表上向后移动

{head=heada

pa=heada->next

pb=headb}

else

{head=headb

pa=heada

pb=headb->next}

p=head

while(pa

&&

pb)//当a,b链表都没到达尾部时,比较a,b链表上当前指示指针pa,pb所指节点的大小,并把新链表的p指向较小的(pa或pb所指的),然后向后移动一下

{

if

(pa->num<=pb->num)

{p->next=pap=p->nextpa=pa->next}

else

{p->next=pbp=p->nextpb=pb->next}

}

if(pa)//说明a链表没到尾部,b链表已结束,直接把a链表剩下的部分接在新链表最后

{

p->next=pa

tail=taila

}

if(pb)//同上b链表后面的部分接在新链表后

{

p->next=pb

tail=tailb

}

tail->next=NULL

/***********end***********/

#include <stdio.h>

#include <string.h>

const char *s = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"

int main(void)

{

    int i, j

    char d[20], e[20], buf[80]

    scanf("%s", d)

    scanf("%s", e)

    for (i = 0, j = 0 i < strlen(s) i++) {

        char tmp[2] = { s[i], 0 }

        if (strstr(d, tmp) || strstr(e, tmp)) {

            buf[j++] = tmp[0]

            buf[j++] = ' '

        }

    }

    buf[--j] = '\0'

    puts(buf)

    return 0

}