赞
踩
编写一个程序,找到两个单链表相交的起始节点。
例如,下面的两个链表:
A: a1 → a2 ↘ c1 → c2 → c3 ↗ B: b1 → b2 → b3
在节点 c1 开始相交。
题目分析:首先求出链表A和链表B的长度,然后看长链表比短链表长几格,那么长链表的头结点就往后走几格,最后两个链表一起开始往后走,相遇的第一个节点就是起始节点。如果两个链表不相交的话,那么相遇的第一个节点必然是空节点。
代码展示:
- class Solution {
- public:
- ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
- int lenA = 0,lenB = 0;
- ListNode *tempA = headA;
- ListNode *tempB = headB;
- while(tempA!=NULL){
- tempA = tempA->next;
- lenA += 1;
- }
- while(tempB!=NULL){
- tempB = tempB->next;
- lenB += 1;
- }
- tempA = headA;
- tempB = headB;
- while(lenA>lenB){
- tempA = tempA->next;
- lenA -= 1;
- }
- while(lenB>lenA){
- tempB = tempB->next;
- lenB -= 1;
- }
- while(tempA!=tempB){
- tempA = tempA->next;
- tempB = tempB->next;
- }
- return tempA;
- }
- };
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。