为什么用dev c++ 可以运行出来,但提交到课业网站显示访问了无效的内存
链表逆置函数:
linkNode * reverse(linkNode * head){
linkNode * temp = head;
while(head->next){
linkNode * pnew(0);
pnew = head->next;
head->next = pnew->next;
pnew->next = temp;
temp = pnew;
free(pnew);
}
linkNode * HEAD(0);
HEAD->next = temp;
return HEAD;
}
将两个链表分别逆置后,找出最后一个相同节点:
linkNode * getIntersectionNode(linkNode * headA, linkNode * headB){
linkNode * HEADA = reverse(headA);
free(headA);
linkNode * HEADB = reverse(headB);
free(headB);
linkNode * temp(0);
temp->next = NULL;
while(HEADA->next && HEADB->next){
if(HEADA->next->val == HEADB->next->val){
linkNode * pnew(0);
pnew->val = HEADA->next->val;
pnew->next = NULL;
temp->next = pnew;
temp = pnew;
HEADA = HEADA->next;
HEADB = HEADB->next;
free(pnew);
}
else break;
}
return temp;
}
代码很奇怪,20行为啥要break呢?意思是两个链表倒置后第一个节点的val值必须是一样?只要不一样就break结束循环?毫无道理啊
。
在第18行之后加return temp;第22行改为return NULL;。然后else 应该是移动两个链表的循环节点指针,移动的规则是val更大的节点向后移动。即
else if(HEADA->next->val < HEADB->next->val)
HEADB->next = HEADB->next->next;
else
HEADA->next = HEADA->next->next;
不是5,6吗