标签:结点 ListNode struct next 链表 NC66 return NULL ta
bool f(struct ListNode* a,struct ListNode* b){//为什么要设置函数,因为当两个书相等的时候还要看后面的是否相等
while(a&&b){
if(a->val!=b->val)
return false;
a=a->next;
b=b->next;
}
if(a==NULL&&b!=NULL)//次情况是没结束只是中途值相同
return false;
else if(a!=NULL&&b==NULL)
return false;
else
return true;
}
struct ListNode* FindFirstCommonNode(struct ListNode* pHead1, struct ListNode* pHead2 ) {
// write code here
for(struct ListNode* a=pHead1; a!=NULL; a=a->next){
for(struct ListNode* b=pHead2;b!=NULL;b=b->next){
if(b->val==a->val){
if(f(a,b))
return a;
}
}
}
return NULL;
}
方法二
/*此方法是相当于把两个链表长度变成一样a+b=b+a*/
/*如a 1 2 3
b 2 3
最终因为长度不一样
最终变成一样的此处有省略
a 1 2 3 2 3
b 2 3 1 2 3
最终在2 3 停止
*/
class Solution {
public:
ListNode* FindFirstCommonNode( ListNode* pHead1, ListNode* pHead2) {
ListNode *ta = pHead1, *tb = pHead2;
while (ta != tb) {//两种一种是最后为空,此处的最后是a+b的长度最后,这里的判断有点东西,是内存地址的判断,开始不明白以为是值
ta = ta ? ta->next : pHead2;
tb = tb ? tb->next : pHead1;
}
return ta;
}
};
struct ListNode* FindFirstCommonNode(struct ListNode* pHead1, struct ListNode* pHead2 ) {
// write code here
for(struct ListNode* a=pHead1; a!=NULL; a=a->next){//收到上面的启发,直接指针判断是不是同一个地址
for(struct ListNode* b=pHead2;b!=NULL;b=b->next){
if(b==a){
return a;
}
}
}
return NULL;
}
标签:结点,ListNode,struct,next,链表,NC66,return,NULL,ta 来源: https://www.cnblogs.com/shuangquantang/p/15666683.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。