PTA-共享后缀的列表

https://blog.csdn.net/qq_18873031/article/details/103215502
我的答案

PtrToNode Suffix( List L1, List L2 )
{
    
    List p1=L1,p2=L2;
    List t=L2;
    while(p1->Next)
    {
        while(p2->Next)
        {
           if(p1->Next==p2->Next)
               return p1;
            p2=p2->Next;
        }
        p1=p1->Next;
        p2=t;
    }
   return NULL;
}

出现的问题:
1.循环浪费时间,可能超时
2.答案错误,原因未知

参考网上的答案后重新整理思路
后缀的长度是相同的,那么只要从对齐两个单词的末尾,将两个单词的头部对齐,较长的可以切掉,再按位比较,p1->Next==p2->Next(因为共享的是地址)

修改后的代码

PtrToNode Suffix( List L1, List L2 )
{
    
    List p1=L1,p2=L2;
   int len1=0,len2=0;
   while(p1->Next)
   {
       len1++;
       p1=p1->Next;
   }
    while(p2->Next)
   {
       len2++;
       p2=p2->Next;
   }
    
    p1=L1;
    p2=L2;
    if(len1>len2)
    {
        while(len1!=len2)
        {
            p1=p1->Next;
            len1--;
        }
    }
    else if(len1<len2)
    {
        while(len1!=len2)
        {
            p2=p2->Next;
            len2--;
        }
    }
    while(p1->Next)
    {
        if(p1->Next==p2->Next)
            break;
         p1=p1->Next;
        p2=p2->Next;
    }
        
    return p1->Next;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值