数据结构链串——字串的替换,不懂的地方
LinkStrNode *RepStr(LinkStrNode *s,int i,int j,LinkStrNode *t) //串替换
{
int k;
LinkStrNode *str,*p=s->next,*p1=t->next,*q,*r;
str=(LinkStrNode *)malloc(sizeof(LinkStrNode));
str->next=NULL;
r=str;
if (i<=0 || i>StrLength(s) || j<0 || i+j-1>StrLength(s))
return str;
for (k=0;k1;k++)
{ q=(LinkStrNode *)malloc(sizeof(LinkStrNode));
q->data=p->data;q->next=NULL; //为什么这里q->next=NULL?
r->next=q;r=q;
p=p->next;
}
for (k=0;kp=p->next;
while (p1!=NULL)
{ q=(LinkStrNode *)malloc(sizeof(LinkStrNode));
q->data=p1->data;q->next=NULL; //为什么这里q->next=NULL?
r->next=q;r=q;
p1=p1->next;
}
while (p!=NULL)
{ q=(LinkStrNode *)malloc(sizeof(LinkStrNode));
q->data=p->data;q->next=NULL; //为什么这里q->next=NULL?
r->next=q;r=q;
p=p->next;
}
r->next=NULL;
return str;
}
我的问题就是为什么字串的替换q->next=NULL?我觉得这句省略了也是可以的啊,而且字串的插入、求子串都没有这句,所以每次都把s链串不用删除的结点放入str链串中,每次为什么q的next又要置NULL?想不通这点,希望大家能指点指点。
如果q是尾节点,你就必须将其next设置为NULL
你把这句话删了再执行,看是不是跑飞了,出野指针了?
q一开始是新节点,然后把它当做尾节点链在最后
如果next不设置成null
那while循环的时候没有一个节点的next会是null,不就一直循环下去,一直跑进野指针里
数据结构链串——串插入
LinkStrNode *InsStr(LinkStrNode *s,int i,LinkStrNode *t) //串插入
{
int k;
LinkStrNode *str,*p=s->next,*p1=t->next,*q,*r;
str=(LinkStrNode *)malloc(sizeof(LinkStrNode));
str->next=NULL;
r=str; //r指向新建链表的尾结点
if (i<=0 || i>StrLength(s)+1) //参数不正确时返回空串
return str;
for (k=1;k<i;k++) //将s的前i个结点复制到str
{ q=(LinkStrNode *)malloc(sizeof(LinkStrNode));
q->data=p->data;
r->next=q;r=q;
p=p->next;
}
while (p1!=NULL) //将t的所有结点复制到str
{ q=(LinkStrNode *)malloc(sizeof(LinkStrNode));
q->data=p1->data;
r->next=q;r=q;
p1=p1->next;
}
while (p!=NULL) //将结点p及其后的结点复制到str
{ q=(LinkStrNode *)malloc(sizeof(LinkStrNode));
q->data=p->data;
r->next=q;r=q;
p=p->next;
}
r->next=NULL;
return str;
}
串插入也是尾插法,为什么这里就不用让p的next指向NULL呢?