赞
踩
编写一个程序,找到两个单链表相交的起始节点。
分析:两个链表在某一结点相交,即为地址相同,可以分别遍历各链表,看在哪一个结点相交。考虑到两个链表的长度可能不一样,所以不能同步遍历,所以可以先求出链表长度的差值,让长链表先走差值个结点,然后再同步各自去遍历。
代码如下:
public ListNode getIntersectionNode(ListNode headA, ListNode headB) { if(headA == null || headB == null) { return null; } ListNode pL = headA;//始终让pL指向长的单链表 ListNode pS = headB;//指向短的 int lenA = 0; int lenB = 0; while(pL != null) { pL = pL.next; lenA++; } while(pS != null) { pS = pS.next; lenB++; } int len = lenA - lenB; //因为后面还要从头开始遍历数组,所以求出长度后要让pL和pS指向头节点 pL = headA; pS = headB; //因为headA不一定是较长的链表,所以也要处理这种情况 if(len < 0) { pL = headB; pS = headA; len = lenB - lenA; } for(int i = 0; i < len; i++) { pL = pL.next; } while(pL != pS) { pL = pL.next; pS = pS.next; } return pL; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。