赞
踩
题目地址:160. 相交链表
给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null
/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */ struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) { //使用双指针 struct ListNode* curA=headA; struct ListNode* curB=headB; int lenA=0,lenB=0; //计算链表A的长度 while(curA!=NULL){ lenA++; curA=curA->next; } //计算链表B的长度 while(curB!=NULL){ lenB++; curB=curB->next; } curA=headA; curB=headB; //求出两个链表长度的差值,然后让长链表头指针向后移动到和短链表头指针相同的位置 if(lenA>lenB){ int gap=lenA-lenB; while(gap--){ curA=curA->next; } }else{ int gap=lenB-lenA; while(gap--){ curB=curB->next; } } //curA,curB从同一位置向后遍历,直到遇到curA,curB相同时,即为交点 while(curA!=NULL && curB!=NULL){ if(curA==curB){ return curA; //return curB; } curA=curA->next; curB=curB->next; } return NULL; }
在这里插入代码片
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。