|
|
发表于 2012-10-13 20:12:54
|
显示全部楼层
改过以后的,改动的地方加了注释。。- #include <stdio.h>
- #include <stdlib.h>
- #include <windows.h>
- typedef struct NODE *pNode;
- struct NODE{
- int data;
- pNode pNext;
- };
- pNode creat_list(int );//链表的创建
- void traverse_list(pNode);//链表的遍历
- void Union(pNode ,pNode,pNode*);//合并两个链表
- int main(void)
- {
- int len1,len2;
- pNode pHead;
- pNode pLast;
- pNode pTem = NULL;;
- //pNode pTem=(pNode)malloc(sizeof(*pTem)); 不需要为pTem分配空间。
-
- // pTem->pNext=NULL;
- printf("请输入第一个链表的节点数:");
- scanf("%d",&len1);
- pHead=creat_list(len1);
- traverse_list(pHead);
- printf("请输入第二个链表的节点数:");
- scanf("%d",&len2);
- pLast=creat_list(len2);
- traverse_list(pLast);
- Union(pHead,pLast,&pTem);
- traverse_list(pTem);
- system("pause");
- return 0;
- }
- pNode creat_list(int n)
- {
- int i;
- pNode pHead=(pNode)malloc(sizeof(*pHead));
- if(NULL==pHead)
- {
- printf("内存分配失败!");
- exit(-1);
- }
- pHead->pNext=NULL;
- pNode pTem=pHead;
- for(i=0;i<n;i++)
- {
- pNode pNew=(pNode)malloc(sizeof(*pNew));
- if(NULL==pNew)
- {
- printf("内存分配失败!");
- exit(-1);
- }
- pTem->pNext=pNew;
- printf("请输入第%d个节点的数据",i+1);
- scanf("%d",&pNew->data);
- pNew->pNext=NULL;
- pTem=pNew;
- }
- return pHead;
- }
- void traverse_list(pNode pHead)
- {
- pNode pTem=pHead->pNext;
- while(NULL!=pTem)
- {
- printf("%d\n",pTem->data);
- pTem=pTem->pNext;
- }
- }
- void Union(pNode pHead,pNode pLast,pNode* pTem) //你的pTem参数没有什么意义,这里用PNode*格式的。
- {
- pNode ph,pl,pt;
- ph=pHead->pNext;
- pl=pLast->pNext;
- (*pTem)=pHead;pt=*pTem;
-
- while(ph&&pl)
- {
- if(ph->data<=pl->data)
- {
- pt->pNext=ph;
- pt=ph;
- ph=ph->pNext;
- }
- else
- {
- pt->pNext=pl;
- pt=pl;
- pl=pl->pNext;
- }
- }
- pt->pNext=ph?ph:pl;
- free(pLast); //这里释放的是pLast;
- }
复制代码 |
|