标签:两种方法 turn 指针 代码 方法 str img common ast
有如下两个链表:
有以下两种方法
上述链表,有一种蛮力方法,就是从一个链表中每一个节点,与另外链表中的节点,去比较,
如果从中找到相同的节点,表示有公共节点,这个算法时间复杂度为O(n*m),两个链表的长度分别为n,m
如果使用快慢指针,让链表长的指针,先走,走的步数就为,两者长度差,如果两者有相同节点,必然会在一个地方,相遇,
该算法的时间复杂度为O(max(n,m))
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
class Solution {
public:
int lenOfList(ListNode* pHead){
int len = 0;
while( pHead != NULL){
++len;
pHead = pHead->next;
}
return len;
}
ListNode* FindFirstCommonNode( ListNode* pHead1, ListNode* pHead2) {
if(pHead1 == NULL || pHead2 == NULL)
return NULL;
int len1,len2,k;
ListNode *pFast=NULL,*pSlow=NULL;
len1 = lenOfList(pHead1);
len2 = lenOfList(pHead2);
if(len1 >len2){
pFast = pHead1;
k = len1-len2;
pSlow = pHead2;
}else{
pFast = pHead2;
k = len2-len1;
pSlow = pHead1;
}
int i=0;
while(i<k){
pFast = pFast->next;
++i;
}
while(pFast != NULL && pSlow != NULL){
if(pFast == pSlow ){
return pFast;
}
pFast = pFast->next;
pSlow = pSlow->next;
}
return NULL;
}
};
标签:两种方法 turn 指针 代码 方法 str img common ast
原文地址:https://www.cnblogs.com/wanshuafe/p/11717400.html