赞
踩
“风格相同的人总会相遇 千万个人中万幸得以相逢.”
本章的内容是力扣每日随机一题的部分方法的解析
给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。
160. 相交链表 link
根据题目这是两个问题先判断是否相交在找到两个链表相交的起始节点。
尾节点是否相等相等尾节点相等就相交(不是比较值而是地址)
例如下图A B链表尾节点值相等但是不相交
struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) { struct ListNode *tailA=headA; struct ListNode *tailB=headB; while(tailA) { tailB=headB; while(tailB) { if(tailA!=tailB) { tailB=tailB->next; } else { return tailA; } } tailA=tailA->next; } return NULL; }
struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) { struct ListNode *tailA=headA; struct ListNode *tailB=headB; int countA=1; int countB=1; while(tailA->next) { tailA=tailA->next; countA++; } while(tailB->next) { tailB=tailB->next; countB++; } if(tailA!=tailB) { return NULL; } //这里也可以使用三目操作符 int gap=abs(countA-countB); struct ListNode *longlist=headA; struct ListNode *shortlist=headB; if(countA<countB) { longlist=headB; shortlist=headA; } while(gap--) { longlist=longlist->next; } while(longlist!=shortlist) { longlist=longlist->next; shortlist=shortlist->next; } return longlist; }
这种链表是不可以逆置的,因为c1这个节点只有一个next所以不可能有两个next同时指向a2和b3(error)
abs 函数是存在于多种编程语言(包括且不限于:C语言、C++、Fortran、Matlab、Pascal、Delphi、Visual Basic 和 VBA)中的一种用于求数据绝对值的函数。
Ending,今天的力扣每日一题内容就到此结束啦,如果后续想了解更多,就请关注我吧,一键三连,还有许多种方法没有写出希望各位佬补充哦~
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。