(整理)Java实现链表--找到两个链表的第一个公共结点(网易笔试题2016)
来源:互联网 发布:协方差矩阵的svd分解 编辑:程序博客网 时间:2024/04/28 16:08
import java.util.*;class Node{Node next = null;int data;public Node(int data){this.data = data;}}public class MyLinkedList {Node head = null;public void addNode(int d){Node newNode = new Node(d);if(head == null){head = newNode;return;}Node tmp = head;while(tmp.next != null){tmp = tmp.next;}tmp.next = newNode;}public Boolean deleteNode(int index){if(index<1||index>length()){return false;}if(index == 1){head = head.next;return true;}int i = 2;Node preNode = head;Node curNode = preNode.next;while(curNode != null){if(i == index){preNode.next = curNode.next;return true;}preNode = curNode;curNode = curNode.next;i++;}return true;}public int length(){int length = 0;Node tmp = head;while(tmp != null){length++;tmp = tmp.next;}return length;}public void printList(){Node tmp = head;while(tmp != null){System.out.println(tmp.data);tmp = tmp.next;}}public static Node findNode(MyLinkedList list,int index){int i;Node p = list.head;for(i = 1; i<index; i++){p = p.next;}return p;}public static Node getFirstMeetNode(Node h1,Node h2){//关键的函数Node p1 = h1;Node p2 = h2; while(p1.next != null && p2.next != null){//作两个链表的长度差 p1 = p1.next; p2 = p2.next; } Node p3,p4,p; if(p1.next == null){ p3 = p2; p4 = h2; p = h1; } else{ p3 = p1; p4 = h1; p = h2; }while(p3.next != null){//长链表到|list1.length()-list2.length()|的位置 此位置与短链表head到第一个公共结点的距离相等 p3 = p3.next; p4 = p4.next; }while(p != p4 && p != null){//通过比较是否相等,找到公共结点p = p.next;p4 = p4.next;}return p;//返回第一个公共结点 }public static void main(String[] args){MyLinkedList list = new MyLinkedList();MyLinkedList list1 = new MyLinkedList();//创建两个列表MyLinkedList list2 = new MyLinkedList();list1.addNode(7);list1.addNode(6);list1.addNode(5);list1.addNode(4);list1.addNode(3);list1.addNode(2);list1.addNode(1);list2.addNode(5);list2.addNode(4);Node p1 = findNode(list1,5);Node p2 = findNode(list2,2);p2.next = p1;//连接两个链表System.out.println("list1");list1.printList();System.out.println("list2");list2.printList();Node p = getFirstMeetNode(list1.head,list2.head);System.out.println("FMN="+p.data);while(true){Scanner s = new Scanner(System.in);String cz = s.next();if(cz.equals("add")){int data = s.nextInt();list.addNode(data);list.printList();}else if(cz.equals("del")){int index = s.nextInt();list.deleteNode(index);list.printList();}else if(cz.equals("len")){System.out.println("Len= "+list.length());}}}}
0 0
- (整理)Java实现链表--找到两个链表的第一个公共结点(网易笔试题2016)
- 两个链表的第一个公共结点java实现
- 【笔试】46、两个链表的第一个公共结点
- 两个链表的第一个公共结点(链表)
- 两个链表的第一个公共结点 java
- [编程题]两个链表的第一个公共结点
- 剑指Offer面试题37(Java版):两个链表的第一个公共结点
- 剑指offer:两个链表的第一个公共结点(java)
- 剑指Offer面试题37(Java版):两个链表的第一个公共结点
- 牛客:剑指offer:两个链表的第一个公共结点(Java)
- 两个链表的第一个公共结点(java版)
- 剑指offer37题(两个链表的第一个公共结点)
- 剑指offer第三十三题【两个链表的第一个公共结点】c++实现
- 找出两个链表的第一个公共结点--总结
- 找出两个链表的第一个公共结点
- 找两个链表的第一个公共结点
- 找出两个链表的第一个公共结点
- 找出两个链表的第一个公共结点
- RabbitMQ监控(3)——核心监控类实现
- BIEE系统C组件启动不了 libxerces-c.so.28
- github常见操作和常见错误!错误提示:fatal: remote origin already exists.
- 演练:从头开始创建 MSBuild 项目文件
- Linux解压缩命令
- (整理)Java实现链表--找到两个链表的第一个公共结点(网易笔试题2016)
- 从30岁到35岁:为你的生命多积累一些厚度
- C++:简单文件输入/输出
- Spring Cache
- CSS边框盒子模型
- 文章标题
- android 打开pdf文件
- Dialog 1
- mysql 命令符操作登陆 展开 查看对象 查看数据表名称 数据表结构 插入