【C语言刷LeetCode】160. 相交链表(E)

双指针问题。长的链表先走,然后剩余长度一致了,碰到相同的节点便是相交的起始节点。

int GetListLen(struct ListNode *list) 
{
     int retLen = 0;
     while(list) {
        retLen++;
        list = list->next;
    }
    return retLen;
}

struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) {
    int counta = 0;
    int countb = 0;
    struct ListNode *lista = headA;
    struct ListNode *listb = headB;
	struct ListNode *retlst = NULL;

    counta = GetListLen(lista);
    countb = GetListLen(listb);

    lista = headA;
    listb = headB;

	while(counta > countb) { 
		lista = lista->next;
		counta--;
	}

	while(countb > counta) { 
		listb = listb->next;
		countb--;
	}

    while(lista) {
		if(lista == listb) {
			retlst = lista;
			break;
		}

        lista = lista->next;
        listb = listb->next;
	}

	return retlst;
}
发布了124 篇原创文章 · 获赞 17 · 访问量 11万+

猜你喜欢

转载自blog.csdn.net/jin615567975/article/details/104364741