Intersection of Two Linked Lists
Write a program to find the node at which the intersection of two singly linked lists begins.
For example, the following two linked lists:
A: a1 → a2 ↘ c1 → c2 → c3 ↗ B: b1 → b2 → b3
begin to intersect at node c1.
Notes:
null
./** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) { int nA = 0,nB = 0,n;// 链表长度 ListNode* p; p = headA; //headA的长度nA while (p) { nA++; p = p->next; } p = headB; //headB的长度nB while (p) { nB++; p = p->next; } if (nA < nB) { n = nB - nA; while (n--) headB = headB->next; } else if (nA > nB) { n = nA - nB; while (n--) headA = headA->next; } while (headA && headB) { if (headA == headB) return headA; headA = headA->next; headB = headB->next; } return NULL; } };
# Definition for singly-linked list. # class ListNode: # def __init__(self, x): # self.val = x # self.next = None class Solution: # @param two ListNodes # @return the intersected ListNode def getIntersectionNode(self, headA, headB): nA = nB = 0 p = headA while (p is not None) : nA = nA + 1 p = p.next p = headB while (p is not None) : nB = nB + 1 p = p.next if (nA < nB) : n = nB - nA while (n) : headB = headB.next n = n - 1 elif (nA > nB) : n = nA - nB while (n) : headA = headA.next n = n - 1 while (headA and headB ) : if (headA == headB): return headA headA = headA.next headB = headB.next return None
版权声明:本文为博主原创文章,未经博主允许不得转载。
leetcode-160-Intersection of Two Linked Lists
原文:http://blog.csdn.net/u014705854/article/details/47053169