单链表——判断两个单链表(无头节点)是否相交,如果相交,返回单链表的第一个结点
生活随笔
收集整理的這篇文章主要介紹了
单链表——判断两个单链表(无头节点)是否相交,如果相交,返回单链表的第一个结点
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
本博客主要記錄兩個解法:
1.求兩個單鏈表的節點個數,消除結點個數不同帶來的影響,兩個指針一起走,相遇即相交點。
2.數學方式求解。
一、求結點個數,消除結點個數不同帶來的影響,倆指針同步走
思路:兩個單鏈表相從相交的第一個結點開始,后面的結點都共享,所以兩個單鏈表的節點個數之差就是相交的結點之前,兩個單鏈表的結點個數之差,我們只需要將兩個單鏈表結點個數之差算出來,然后消除結點個數不同帶來的影響,讓p1和p2同時向后走,那么相遇的時候,即相交的第一個結點,如下圖:
p1和p2分別從兩個單鏈表的如下位置同時向后走,那么p1和p2相遇時的結點即為相交的第一個節點(如果不相交,那么p1和p2最終都會指向NULL)
代碼:
二、數學思維
思路:
如下圖,假設相交的結點之前第一個單鏈表的結點個數為a,第二個結點個數為b,相交部分結點個數為c
那么p1(==head1)走完整個單鏈表,走的距離為:a+c
那么p2(==head2)走完整個單鏈表,走的距離為:b+c
如果我們讓p1走單鏈表的尾之后,從head2繼續向后走,p2走到單鏈表的尾之后從head1繼續向后走,那么最后p1和p2到相交的第一個結點一定相遇,因為它們倆這個時候走的總距離都為a+b+c+1,一起走的,所以p1和p2在單鏈表相交的第一個結點的位置一定相遇。如果單鏈表沒有相交,那么最后p1和p2都會指向NULL。
代碼:
總結
以上是生活随笔為你收集整理的单链表——判断两个单链表(无头节点)是否相交,如果相交,返回单链表的第一个结点的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 动态联编和静态联编
- 下一篇: 递归算法——汉诺塔问题