求助。。。链表问题
这是将链表hc:a1,b1,a2,b2...an,bn拆分为ha:a1,a2...an和hb:b1,b2...bn的算法。vc6.0编译出错,好象是内存分配问题,实在是找不出哪里不对。。注释掉p=p->next;和最后的ra->next=rb->next=NULL;两句就不出错了。
- C/C++ code
void split(linklist* hc,linklist* &ha,linklist* &hb){ linklist *p,*ra,*rb; p=hc->next; ha=hc; ra=ha; hb=(linklist*)malloc(sizeof(linklist)); rb=hb; while(p){ ra->next=p; ra=p; p=p->next; rb->next=p; rb=p; p=p->next; } ra->next=rb->next=NULL;}完整代码
- C/C++ code
#include <stdio.h>#include <malloc.h>typedef struct Lnode{ int data; struct Lnode *next;}linklist;void create_TOU(linklist *&L,int r[],int length){ linklist *newnode; L=(linklist*)malloc(sizeof(linklist)); L->data=length; L->next=NULL; for(int i=0;i<length;i++){ newnode=(linklist*)malloc(sizeof(linklist)); newnode->data=r[i]; newnode->next=NULL; newnode->next=L->next; L->next=newnode; }}void printL(linklist *L){ printf("The value is: "); L=L->next; while(L->next!=NULL){ printf("%d->",L->data); L=L->next; } printf("%d\n",L->data);}void split(linklist* hc,linklist* &ha,linklist* &hb){ //二、8 linklist *p,*ra,*rb; p=hc->next; ha=hc; ra=ha; hb=(linklist*)malloc(sizeof(linklist)); rb=hb; while(p){ ra->next=p; ra=p; p=p->next; rb->next=p; rb=p; p=p->next; } ra->next=rb->next=NULL;}int main(){ int r[]={45,89,33,12,59,879,6}; int length=sizeof(r)/sizeof(r[0]); linklist* myL; create_TOU(myL,r,length); printL(myL); /*------------二、8--------*/ linklist *ha,*hb; split(myL,ha,hb); printL(ha); printL(hb); /*--------------------------*/ return 0;}[解决办法]
while(p)
{
ra->next=p;
ra=p;
p=p->next;
rb->next=p;
rb=p;
p=p->next;
}
这一段执行后P会连续向后移两个位置,在第一次移动后你没有判断P的有效性,如果指向了空,第二次就异常了。
我读了这段代码,没明白你要做的到底是什么?请明确一下要实现的功能!!!
[解决办法]
改好了
- C/C++ code
void split(linklist* hc,linklist* &ha,linklist* &hb){ //二、8 linklist *p,*ra,*rb; p=hc->next; ha=hc; ra=ha; hb=(linklist*)malloc(sizeof(linklist)); rb=hb; while(p){ ra->next = p; ra=p; p=p->next; if(p) //加上这个判断 { rb->next=p; rb=p; p=p->next; } } ra->next=rb->next=NULL;}