给出两个链表,要求返回两个链表的相交节点。如3,4,5,6和1,2,5,6则返回5.

为什么用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吗