赞
踩
数据结构-链表:算法与数据结构参考
题目:
例如以下示例中 A 和 B 两个链表相交于 c1:
若存在则返回c1,如果不存在交点则返回 null。
要求时间复杂度为 O(N),空间复杂度为 O(1)。
思路:
使得A,B两个链表剩下的长度相同,再进行逐个比较找出交点。
A,B各自长度未知,重点在于长度的处理
代码:
/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */ struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) { if(headA==NULL || headB==NULL) return NULL; int lena,lenb; struct ListNode *p=headA; struct ListNode *q=headB; for(lena=0;p=p->next;lena++); for(lenb=0;q=q->next;lenb++); int diff=lena-lenb; //计算两个链表的长度差 while(diff>0){ headA=headA->next; diff--; } while(diff<0){ headB=headB->next; diff++; } //定位两个链表的节点,使余下链表长度相等 while(headA!=headB){ headA=headA->next; headB=headB->next; } return headA; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。