加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

单链表的合并(C语言)

(2012-07-23 16:51:10)
标签:

杂谈

掌握了具体算法后,不论是用Java和C感觉都不是太难。
#include "stdio.h"
#include "malloc.h"

//节点的声明
typedef struct Node{
    int data;
    struct Node * next;
    }node,*ptrNode;
//采用尾插法建立单链表
 ptrNode Create_List(int n){//参数n为链表的节点数
    int i =0;
    ptrNode p,head;
    head = (ptrNode)malloc(sizeof(node));
    head->next = NULL;
    for(i=n;i>0;i--){
        p = (ptrNode)malloc(sizeof(node));
        printf("input the value:");
        scanf("%d",&p->data);//注意此处的&
        p->next = head->next;//使新节点和后一节点连接起来
        head->next = p;//使新的节点和头节点连接起来,保证head的指针域存储的是下一节点的地址
        }
       return head;
    }
void Merge_List(ptrNode la,ptrNode lb,ptrNode lc){
     ptrNode pa,pb,pc;
     pa = la->next;
     pb = lb->next;
     pc = lc;
     while(pa&&pb){
         if((pa->data)<=(pb->data)){
             pc->next = pa;
             pc = pa;//使pc指向当前lc的最后一个节点
             pa = pa->next;
             }
             else{
                 pc->next = pb;
                 pc = pb;
                 pb = pb->next;
                 }
         }
     pc->next = pa?pa:pb;
     free(lb);
    }
void Print_List(ptrNode head){
    ptrNode p;
    p = head->next;
    while(p){
        printf("[%d] ",p->data);//打印当前数据
        p=p->next;//指针后移
        }
    }
void main(){
           ptrNode la,lb,lc;
     la = Create_List(5);
     lb = Create_List(4);
     lc = la;//以链表la的头节点为新链表的头节点
     Merge_List(la,lb,lc);
     Print_List(lc);
     getch();
    }

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有