Java实现查找链表的中间节点,(在未知链表长度的情况下)

来源:互联网 发布:淘宝卖家退款流程 编辑:程序博客网 时间:2024/05/20 17:40

下面是自己实现的一个类似于LinkedList类,其中getMidNode方法是获取链表的中间节点的实现方法(在未知列表长度的情况下),大致思路如下:

1、首先在方法中定义temp 、 temp2两个局部变量。

2、temp每次循环next一次,temp2每次循环next两次,当temp2.next==null时表示temp2已经执行到达了链表的末尾,而temp刚好执行到链表的一半。

备注:此种做发的思路类似于C语言的指针操作,设立两个指针,一个单步走,一个两步走,当大步指针到达链表尾部的时候,小步指针也正好位于链表中间位置。由于本人能力有限,工作之余写一些东西分享给各位,希望对大家有所帮助,如有写得不好的地方希望各位给我留言,我并及时纠正。如你阅读之后觉得对你有所帮助,千万不要忘记鼓励一下我,麻烦顶一下哦!!!废话不多说,直接上完整源代码。


package lsp.connection;/** * 自己实现类似于JDK的LinkedList类 *  * @author Administrator * * @param <E> */public class LspLinkedList<E> {private Node<E> first;private Node<E> last;private int size;public int size(){return size;}/** * 添加一个节点 * @param e */public void add(E e){Node<E> node = new Node<E>();if(first == null){node.previous = null;node.item = e;node.next = null;first = node;last = node;//首尾节点为同一个}else {//直接向last中插入下一节点node.previous = last;node.item = e;node.next = null;//给last的下一节点赋值为当前传入的节点值last.next = node;//重新给last节点赋值last = node;}size++;}/** * 根据index获取节点 * @param index * @return */public E get(int index){if(first != null){Node<E> temp = first;for (int i = 0; i < index; i++) {temp = temp.next;}return temp.item;}return null;}/** * 根据index删除节点元素 * @param index */public void remove(int index){if(first != null){Node<E> temp = first;for (int i = 0; i < index; i++) {temp = temp.next;}Node<E> before = temp.previous;Node<E> after = temp.next;before.next = after;after.previous = before;size--;}}/** * 获取链表的中间节点(在未知链表长度的情况下) * @return */public E getMidNode(){if(first != null){Node<E> temp = first;Node<E> temp2 = temp.next;while(temp.next != null && temp2.next != null){temp = temp.next;temp2 = temp2.next;if(temp2.next != null){temp2 = temp2.next;}}return temp.item;}return null;}public static void main(String[] args) {LspLinkedList<String> lspLinkedList = new LspLinkedList<String>();lspLinkedList.add("111");lspLinkedList.add("222");lspLinkedList.add("333");lspLinkedList.add("444");lspLinkedList.add("555");System.out.println(lspLinkedList.getMidNode());}}
package lsp.connection;/** * 节点类 * @author Administrator * * @param <E> */public class Node<E> {Node<E> previous;E item;Node<E> next;public Node() {}public Node(E item, Node<E> previous, Node<E> next) {super();this.item = item;this.previous = previous;this.next = next;}}



阅读全文
1 0