Home>Article>Backend Development> PHP learning: Find the first common node of two linked lists

PHP learning: Find the first common node of two linked lists

little bottle
little bottle forward
2019-04-25 13:22:02 1548browse

The editor of this article will teach you how to use PHP to find the first common node of two linked lists. It has certain reference value. Interested friends can take a look. I hope it will be helpful to you.

Input two linked lists and find their first common node
1. Two singly linked lists have common nodes, so it is inevitable that the tails are common
2.Find linked list 1 The length of linked list 2, find the length of linked list 2, subtract the short linked list from the long linked list to get an n value
3. The long linked list moves n steps first, and then the two linked lists move at the same time
4. Two linked lists The intersection point is the first public node

list1 list2 len1 len2 if len1 > len2 n=len1-len2 for i=0;inext else n=len2-len1 for i=0;inext while list1!=null if list1==list2 return list1 list1=list1->next list2=list2->next return null
data=$data; } } //构造一个链表 $linkList1=new Node(); $linkList1->next=null; $temp=$linkList1; $node1=new Node(1); $temp->next=$node1; $temp=$node1; $node2=new Node(2); $temp->next=$node2; $temp=$node2; $node3=new Node(3); $temp->next=$node3; $temp=$node3; $node4=new Node(4); $temp->next=$node4; $temp=$node4; $node5=new Node(5); $temp->next=$node5; $node5->next=null; //构造一个和上面有公共结点的链表 $linkList2=new Node(); $linkList2->next=null; $temp=$linkList2; $node7=new Node(7); $temp->next=$node7; $node7->next=$node4;//链向上面链表的第四个结点 var_dump($linkList1); var_dump($linkList2); $commonNode=FindFirstCommonNode($linkList1,$linkList2); var_dump($commonNode); //找第一个公共结点 function FindFirstCommonNode($pHead1, $pHead2){ //链表1的长度 $len1=0; $temp=$pHead1->next; while($temp!=null){ $temp=$temp->next; $len1++; } //链表2的长度 $len2=0; $temp=$pHead2->next; while($temp!=null){ $temp=$temp->next; $len2++; } $list1=$pHead1->next; $list2=$pHead2->next; //长的链表先走n步 if($len1 > $len2){ $n=$len1-$len2; for($i=0;$i<$n;$i++){ $list1=$list1->next; } }else{ $n=$len2-$len1; for($i=0;$i<$n;$i++){ $list2=$list2->next; } } //两个链表长度一致,同时走,第一个相同的点就是第一个公共结点 while($list1!=null){ if($list1==$list2){ return $list1; } $list1=$list1->next; $list2=$list2->next; } return null; }
object(Node)#1 (2) { ["data"]=> string(0) "" ["next"]=> object(Node)#2 (2) { ["data"]=> int(1) ["next"]=> object(Node)#3 (2) { ["data"]=> int(2) ["next"]=> object(Node)#4 (2) { ["data"]=> int(3) ["next"]=> object(Node)#5 (2) { ["data"]=> int(4) ["next"]=> object(Node)#6 (2) { ["data"]=> int(5) ["next"]=> NULL } } } } } } object(Node)#7 (2) { ["data"]=> string(0) "" ["next"]=> object(Node)#8 (2) { ["data"]=> int(7) ["next"]=> object(Node)#5 (2) { ["data"]=> int(4) ["next"]=> object(Node)#6 (2) { ["data"]=> int(5) ["next"]=> NULL } } } } object(Node)#5 (2) { ["data"]=> int(4) ["next"]=> object(Node)#6 (2) { ["data"]=> int(5) ["next"]=> NULL } }

Related tutorials:PHP video tutorial

The above is the detailed content of PHP learning: Find the first common node of two linked lists. For more information, please follow other related articles on the PHP Chinese website!

php
Statement:
This article is reproduced at:cnblogs.com. If there is any infringement, please contact admin@php.cn delete