ShilohLin 2021-07-21 10:33 采纳率: 0%
浏览 33

剑指 Offer 52. 两个链表的第一个公共节点

运行超时怎么办啊,代码时间复杂度也不高啊,有无人看还有哪里能改进时间的地方
代码如下:


```c
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) {

    
        struct ListNode* tailA = headA;
        struct ListNode* tailB = headB;
        int a=0,b=0; //记录两个链表的长度

        while(tailA){ //分别遍历两个链表,记录长度
            tailA++;
            a++;
        }
         while(tailB){
            tailB++;
            b++;
        }

    if(tailB != tailA){ //两个尾指针不一致,必然不相交
         return NULL;
    }

 //相交求交点
        tailA = headA; //链表指针归位
        tailB = headB;


        int c=0; //c等于两链表长度差
        if (a<b){
          c=b-a;
          tailB+=c;//链表对齐
        }
        else{
          c=a-b;
          tailA+=c;//链表对齐
        }

        while(tailA!=tailB)
        {
            tailB++;
            tailA++;
        }
        return tailA;
           
 
}

```

  • 写回答

2条回答 默认 最新

  • 八云黧 2021-07-21 10:54
    关注

    超时是因为死循环了,用指针++的方式遍历链表就离谱,你while(指针)永远为真,因为指针会一直自增。把所有指针++替换成指针=指针->next就好了。记得return前的循环加上判断指针为NULL

    评论

报告相同问题?

问题事件

  • 创建了问题 7月21日

悬赏问题

  • ¥15 向数据表用newid方式插入GUID问题
  • ¥15 multisim电路设计
  • ¥20 用keil,写代码解决两个问题,用库函数
  • ¥50 ID中开关量采样信号通道、以及程序流程的设计
  • ¥15 U-Mamba/nnunetv2固定随机数种子
  • ¥15 C++行情软件的tick数据如何高效的合成K线
  • ¥15 vba使用jmail发送邮件正文里面怎么加图片
  • ¥15 vb6.0如何向数据库中添加自动生成的字段数据。
  • ¥20 在easyX库下编写C语言扑克游戏跑的快,能实现简单的人机对战
  • ¥15 svpwm波形异常求解答