读书人

求教怎么合并两个链表以及释放内存

发布时间: 2012-03-09 16:54:57 作者: rapoo

求教如何合并两个链表以及释放内存

C/C++ code
 #include <stdio.h>#include <malloc.h>#include <stdlib.h>#define MC (Count *)malloc(sizeof(struct Count));struct Count{    int Val;//系数    int Last;//指数    struct Count * pNext;};//造链表并赋值struct Count * Make (void){    int val;    int last;    int len;//链表长度    int i;    struct Count * pHead = MC//头指针       if (pHead == NULL)    {         printf("分配内存失败!\n");         exit(-1);     }     struct Count * pList = MC//结点     pList = pHead;     pList->pNext = NULL;      printf("的项数为:");     scanf("%d",&len);     for (i=0;i<len;++i)     {          printf("第%d项为(系数,指数):",i+1);          scanf("%d,%d",&val,&last);                   struct Count * pNew = MC          if (pHead == NULL)          {              printf("分配内存失败!\n");              exit(-1);          }          pNew->Val = val;          pNew->Last = last;          pList->pNext = pNew;          pNew->pNext = NULL;          pList = pNew;       }            return pHead;}//列出多项式void List(Count * pHead){    struct Count * p = pHead->pNext;    while (p!=NULL)    {        printf("(%dX^%d)",p->Val,p->Last);        p = p->pNext;        if (p!=NULL)            putchar('+');    }    putchar('\n');    return;}//多项式相加处理struct Count * Add (Count * pHead_1,Count * pHead_2){    pHead_1 = pHead_1->pNext;               while (pHead_1 != NULL)        {            pHead_1 =pHead_1->pNext;            if (pHead_1->pNext == NULL)            {                pHead_1->pNext = pHead_2;                break;            }                    }        return pHead_1;}int main (void){    struct Count * phead_1 = NULL;    struct Count * phead_2 = NULL;    struct Count * phead_add = NULL;    printf("\n多项式<1>");    phead_1 = Make();    printf("\n你输入的多项式为:\n");    List(phead_1);    printf("\n多项式<2>");    phead_2 = Make();    printf("\n你输入的多项式为:\n");    List(phead_2);    phead_add = Add (phead_1,phead_2);    printf("\n多项式的和为:\n");    List(phead_add);    return 0;}/*在VC++6.0运行结果是:多项式<1>的项数为:2第1项为(系数,指数):3,3第2项为(系数,指数):4,2你输入的多项式为:(3X^3)+(4X^2)多项式<2>的项数为:2第1项为(系数,指数):2,4第2项为(系数,指数):5,4你输入的多项式为:(2X^4)+(5X^4)多项式的和为:(-842150451X^-842150451)+(2X^4)+(5X^4)Press any key to continue*/


[解决办法]
3个问题

1、Add 函数返回的指针不是表1的头节点,而是表1的尾节点(实际上不需要返回,Add函数声明为 void 都行)
2、main函数中,List调用传入的参数应该是phead_1
3、Add 函数中,连接两个链的时候,pHead_1->pNext = pHead_2,实际上是把表2的头节点也链进去了,应该跳过表2的头节点链表2的第一个数据节点:pHead_1->pNext = pHead_2->pNext
[解决办法]
如果是链表连接,就无需释放,都仍是在使用的。

读书人网 >C语言

热点推荐