2 immicheal IMmicheal 于 2016.04.03 17:34 提问

寻找一个单向链表的中项 java 调用问题!谢谢大家

//寻找一个单向链表的中项,如果存在两个则返回前一个,给出算法描述,并实现
package pra_bd;

import java.awt.DisplayMode;

import javax.naming.spi.DirStateFactory.Result;

import org.w3c.dom.Node;

public class LinkList {
//头结点
Link first;
//单链表构造函数
public LinkList(){
first = null;
}
//判断单链表是否为空
public boolean isEmpty(){
return (null==first);
}
//在单链表头插入新结点
public void insertFirst(Integer value, Integer integer){
Link newLink = new Link(value);
newLink.next = first;
first = newLink;
}
//删除单链表头
public Link deleteFirst(){
Link result = first;
first = first.next;
return result;
}
//显示链表
public void display(){
Link current = first;
while(null!=current){
current.display();
current = current.next;
}
System.out.println("");
}
//计算单链表长度
public int getLength(){
int result = 0;
Link current = first;
while(null!=current){
result++;
current = current.next;

 }
 System.out.println("长度: "+result);
 return result;

}

private class Link{
long lvalue;
Link next;
//结点构造函数
public Link(long value){
lvalue = value;
next = null;
}
//显示结点
public void display(){
System.out.print(lvalue+" ");
}
public long length(){
return this.length( );
}

}
public static  Link getMiddleNode(Link first) {
    // TODO Auto-generated constructor stub

    if (first==null||first.next==null ){
        return first;
    }
    Link p=first;
    Link q=first;
    while(q.next!=null){
        q=q.next;
        p=p.next;
        if(q.next!=null){
            q=q.next;


        }
        System.out.println("fanhui"+p);
    }
    return p;

}
public long length(Link node){
    if(node==null)
        return 0;
    else if(node.next==null)
        return 1;
    else 
        return 1+this.length(node.next);
}

public static void main(String[] args) {
// TODO Auto-generated method stub
//测试单链表
LinkList linklist = new LinkList();
int a [] = {100,200,300};
for(int i=0;i<a.length;i++){
linklist.insertFirst(a[i],new Integer(i+1));
}
// linklist.insertFirst(1);
// linklist.insertFirst(2);
// linklist.insertFirst(3);
// linklist.insertFirst(4);
// linklist.insertFirst(5);
// linklist.insertFirst(6);
linklist.display();
// linklist.deleteFirst();
// linklist.deleteFirst();

linklist.getLength();
Link.getMiddleNode();//就是这一行报错!!!!
}
}
最后getmiddlenode怎么调用啊,显示有问题,谢谢大家!

4个回答

wojiushiwo945you
wojiushiwo945you   Ds   Rxr 2016.04.03 18:24

首先,你的getMiddleNode方法定义的是LinkList的static的,不是Link类的,所以报编译错误了。
其次,你可以看编译器的错误提示信息,快捷键ctrl+1(数字1),修正代码如下:

 LinkList.getMiddleNode(linklist.first);
CSDNXIAON
CSDNXIAON   2016.04.06 17:02

用单向循环链表解决约瑟夫环(Joseph)问题
----------------------同志你好,我是CSDN问答机器人小N,奉组织之命为你提供参考答案,编程尚未成功,同志仍需努力!

CSDNXIAOD
CSDNXIAOD   2016.04.06 17:02

用单向循环链表解决约瑟夫环(Joseph)问题
----------------------biu~biu~biu~~~在下问答机器人小D,这是我依靠自己的聪明才智给出的答案,如果不正确,你来咬我啊!

IMmicheal
IMmicheal   2016.04.21 09:47

自己解答! 修改成功
//寻找一个单向链表的中项,如果存在两个则返回前一个,给出算法描述,并实现
package pra_bd;

import java.io.FilterInputStream;

import javax.naming.spi.DirStateFactory.Result;

import org.w3c.dom.Node;

public class LinkList {
//头结点
Link first;
//单链表构造函数
public LinkList(){
first = null;
}

//判断单链表是否为空
public boolean isEmpty(){
 return (null==first);
}
//在单链表头插入新结点
public void insertFirst(Integer value, Integer integer){
 Link newLink = new Link(value);
 newLink.next = first;
 first = newLink;
}
//删除单链表头
public Link deleteFirst(){
 Link result = first;
 first = first.next;
 return result;
}
//显示链表
public void display(){
 Link current = first;
 while(null!=current){
  current.display();
  current = current.next;
 }
 System.out.println("");
}
//计算单链表长度
public int getLength(){
 int result = 0;
 Link current = first;
 while(null!=current){
  result++;
  current = current.next;

 }
 System.out.println("长度: "+result);
 return result;

}

private static class Link{
long lvalue;
Link next;
//结点构造函数
public long get()
{
return this.lvalue;
}
public Link(long value){
lvalue = value;
next = null;
}
//显示结点
public void display(){
System.out.print(lvalue+" ");
}
public long length(){
return this.length( );
}

public long length(Link node){
    if(node==null)
        return 0;
    else if(node.next==null)
        return 1;
    else 
        return 1+this.length(node.next);
}

}
public static Link getMiddleNode(Link first) {
// TODO Auto-generated constructor stub

    if (first==null||first.next==null ){
        return first;
    }
    Link p=first;
    Link q=first;
    while(q.next!=null){
        q=q.next;
        p=p.next;
        if(q.next!=null){
            q=q.next;   
        }
        //System.out.println("返回"+p.get());
    }
    System.out.println("返回"+p.get());
    return p;

}

public static void main(String[] args) {
// TODO Auto-generated method stub
//测试单链表
LinkList linklist = new LinkList();
Link b = new Link(0);
int a [] = {100,200,300,500,600,700,800};
for(int i=0;i<a.length;i++){
linklist.insertFirst(a[i],new Integer(i+1));
}

linklist.display();
linklist.getLength();
linklist.getMiddleNode(linklist.first);
}
}

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
首先谢谢大家的关注!
首先谢谢大家的关注! 谢谢大家! 谢谢大家!! 谢谢大家!!! 重要的事情要说好几遍~ 首先做个自我介绍吧 中文名字是乔浩磊  英文名字是feiyu~ 哈哈当个玩笑就好了~ 现就读于河南某高校 正在完成小时候的梦想——步入IT 行业 本人从小酷爱计算机,接触电脑时间比较早打过无数游戏用过无数电脑系统当然~~也玩坏过无数次系统 想在大学期间利用空闲时间积
算法:寻找两个单项链表的交点
问题:寻找两个单项链表的交点。
收集大家的想法,谢谢参与。。
  我们刚上了软件工程,老师让我们这组做个“文件检索系统”,我想用软件工程的角度去做这个,但是我觉得单纯做一个类似于windows的文件搜索,用处不是很大,用户的对这个需求不是很高。。。所以希望大家帮我想个运用到这个功能的项目,同时用户比较需求这个。。 希望大家给点建议,拜谢。。。
单向链表--java实现
我们都知道,java中自带了许多的数据结构。这些数据结构被封装的很好,使得我们用的很方便,但是我们却不知道这些数据结构具体是怎么实现的。 于是,自己尝试着实现了一个链表。单向链表示意图: 单向链表实现代码:public class LinkedList<E> { private class Node<E>{ public E value; public No
Java实现寻找链表的中间节点
利用快慢指针: 设置两个指针slow和fast,两个指针同时向前走,fast指针每次走两步,slow指针每次走一步,直到fast指针走到最后一个结点时,此时slow指针所指的结点就是中间结点。 public class l链表中间节点 { public static void main(String[] args){ int[] array = {1,2,3,4,5,6,7,8,9,10
判断单向链表中是否有环和查找环的入口
快慢指针算法描述定义两个指针slow, fast。slow指针一次走1个结点,fast指针一次走2个结点。如果链表中有环,那么慢指针一次会再某一个时刻追上快指针(slow == fast)。如果没有环,则快指针会第一个走到NULL。实现结点定义如下:class Node { public Node next; public Object data; public static
一次遍历单向链表找到中间节点
一次遍历单向链表找到中间节点 具体方法和思想: 1)设置2个指针,一个走2步时,另一个走1步; 2)那么一个走到头时,另一个走到中间。 iNode * GetMiddleNode ( iNode *head ) { iNode *p1 = head; iNode *p2 = p1; while( p2 ) { p2 = p2->n
【Java】实现一个算法,找出一个单链表中倒数第K个结点
用迭代法,使用两个指针P1和P2,分别指向链表中相聚K个结点的两个结点。 P1,p2均指向头加点,然后将P2向前移动K个结点。之后,以相同的速度移动这两个指针,那么p2会在length-K步后到达尾结点,这时p1就刚好在第length-K个结点也就是倒数第K个结点的位置上。 LinkListNode nthToLast(LinkListNode head, int k) { if( k<0
Java单链表基本操作(五)--查找倒数第K个节点
package listnode; /** * @author Gavenyeah * @date Start_Time:2016年4月1日 上午11:47:44 * @date End_Time:2016年4月1日 上午11:55:24 */ public class LastKNode { public static void main(String[] args) {
单链表操作之查找中间结点
***单链表操作之查找中间结点*** //查找链表的中间结点; //自定义的结点结构体和头指针结构体: #include #include #include #include typedef int DataType; typedef struct LinkNode { DataType data; struct LinkNode* n