java单链表正中间的值_Java实现查找链表的中间节点,(在未知链表长度的情况下)...

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

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

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

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

package lsp.connection;

/**

* 自己实现类似于JDK的LinkedList类

*

* @author Administrator

*

* @param

*/

public class LspLinkedList {

private Node first;

private Node last;

private int size;

public int size(){

return size;

}

/**

* 添加一个节点

* @param e

*/

public void add(E e){

Node node = new Node();

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 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 temp = first;

for (int i = 0; i < index; i++) {

temp = temp.next;

}

Node before = temp.previous;

Node after = temp.next;

before.next = after;

after.previous = before;

size--;

}

}

/**

* 获取链表的中间节点(在未知链表长度的情况下)

* @return

*/

public E getMidNode(){

if(first != null){

Node temp = first;

Node 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 lspLinkedList = new LspLinkedList();

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

*/

public class Node {

Node previous;

E item;

Node next;

public Node() {

}

public Node(E item, Node previous, Node next) {

super();

this.item = item;

this.previous = previous;

this.next = next;

}

}

项目

方法

Uc8AR

wGBD91288

CTre6

2008-01-28 15:34:42

o8ox1

2008.09.13 05-32-53

UF4Y8

25MIc2960

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值