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