package a.b.c.mytest;
/**
* 两个单链表,找第一个共同的元素
* @author chenhao02
*
*/
public class TestLink {
public static void findFirstNode(Node firstLink,Node secondLink)
{
Node first = firstLink;
//遍历第一个链表,求其长度
int firstSize = 1;
while((first = first.getNext()) != null){
firstSize ++;
}
//遍历第二个链表,求其长度
Node second = secondLink;
int secondSize = 1;
while((second = second.getNext()) != null){
secondSize ++;
}
//比较两个链表的长度,长的那个先走“差”步
first = firstLink;
second = secondLink;
if(secondSize > firstSize){
for(int i=0;i<secondSize-firstSize;i++){
second = second.next;
}
}else{
for(int i=0;i<firstSize - secondSize;i++){
first = first.next;
}
}
while(first != null && first != second){
first = first.next;
second = second.next;
}
System.out.println(first.getValue());
System.out.println("done");
}
public static void main(String[] args) {
//两个链表: 1->2->3->4->5->6->7->8, 10->11->6->7->8
Node node1 = new Node(1);
Node node2 = new Node(2);
Node node3 = new Node(3);
Node node4 = new Node(4);
Node node5 = new Node(5);
Node node6 = new Node(6);
Node node7 = new Node(7);
Node node8 = new Node(8);
Node node10 = new Node(10);
Node node11 = new Node(11);
node1.setNext(node2);
node2.setNext(node3);
node3.setNext(node4);
node4.setNext(node5);
node5.setNext(node6);
node6.setNext(node7);
node7.setNext(node8);
node10.setNext(node11);
node11.setNext(node6);
TestLink.findFirstNode(node1, node10);
}
}
class Node{
Node next;
int value;
public Node(){
}
public Node(int value){
this.value = value;
this.next = null;
}
public void setNext(Node next){
this.next = next;
}
public Node getNext(){
return this.next;
}
public int getValue(){
return this.value;
}
public void setValue(int value){
this.value = value;
}
}
两个单链表,找第一个公共元素
最新推荐文章于 2022-11-18 22:16:36 发布