【学习点滴-数据结构-单链表】单链表的建立,遍历及有序单链表合并

/*
 * 算法功能:建立单链表,遍历单链表,及有序单链表的合并。
 * @author:xiaoq-ohmygirl
 * @time :2012-06-20
 **/

#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#define MAXNODE 5

typedef struct linkNode{
    int data;
    linkNode * next;
}linkNode,*linkList;

void mergeList(linkList &La,linkList &Lb,linkList &Lc){
    linkNode *pa,*pb,*pc;
    pa = La->next;
    pb = Lb->next;
    Lc = pc = La;
    while(pa && pb){
        if(pa->data <= pb->data){
            pc->next = pa;
            pc = pa;
            pa = pa->next;
        }
        else{
            pc->next = pb;
            pc = pb;
            pb = pb->next;
        }
        pc->next = pa ? pa : pb;
        free(Lb);
    }
}
//表头后插入节点法建立单链表。逆序输入相应节点的值来建立单链表。
int createLinkList(linkList & L,int n){
    L = (linkList)malloc(sizeof(linkNode));
    if(!L){
        return 0;
    }
    L->next = NULL;
    linkList p;
    for(int i = n;i > 0;i--){
         p = (linkList)malloc(sizeof(linkNode));
         scanf("%d",&p->data);
         p->next = L->next;
         L->next = p;
    }
    return 1;
}

void visit(linkNode * node){
    printf("%d ",node->data);
}

void getNewLine(){
    printf("\n");
}

void traverseLink(linkList L){
    linkNode* cur = L->next;
    getNewLine();
    while(cur != NULL){
        visit(cur);
        cur = cur->next;
    }
    getNewLine();
}


int main(){
    linkList La = NULL;
    linkList Lb = NULL;
    linkList Lc = NULL;
    int asize,bsize;
    asize = bsize = MAXNODE;
    createLinkList(La,asize);
    createLinkList(Lb,bsize);
    traverseLink(La);
    traverseLink(Lb);

    mergeList(La,Lb,Lc);
    traverseLink(Lc);
    system("pause");
    return 0;

}



你可能感兴趣的:(【学习点滴-数据结构-单链表】单链表的建立,遍历及有序单链表合并)