java - 反向链表问题

标签 java linked-list reverse

我在 java 中有以下链表程序,除了反向链表功能外,它工作正常。我错过了什么?

public class LinkedList {

private Link first;

public LinkedList()
{
    first = null;
}
public boolean isEmtpy()
{
    return(first==null);
}

public void insertFirst(int id, double dd)
{
    Link newLink=new Link(id,dd);
    newLink.next=first;     //new link --> old first
    first =newLink;         //first --> newLink
}
public Link deleteFirst()
{
    Link temp=first;
    first=first.next;
    return temp;
}
public void displayList()
{
    Link current=first;
    System.out.println("List (first-->last)");
    while(current!=null)
    {
        current.displayLink();
        current=current.next;
    }       
    System.out.println(" ");
}
public Link find(int key)
{
    Link current=first;

    while(current.iData!=key)
    {
        if(current.next==null)
            return null;    //last link
        else
            current=current.next;

    }
    return current;
}
public Link delete(int key)
{
    Link current=first;
    Link previous=first;

    while (current.iData!=key)
    {
        if (current.next==null)
            return null;
        else
        {
            previous=current;
            current=current.next;
        }
    }
    if(current==first)
        first=first.next;
    else
        previous.next=current.next;
    return current;     
}   

public void insertAfter(int key, int id, double dd)
{
    Link current=first;
    Link previous=first;

    Link newLink = new Link(id,dd);
    while (current.iData!=key)
    {
        if (current.next==null)
            System.out.println("At the last Node");
        else
        {
            previous=current;
            current=current.next;

        }
    }
    System.out.println("Value of previous "+ previous.iData);
    System.out.println("Value of current after which value will be inserted is " + current.iData);
    newLink.next=current.next;
    current.next=newLink;
}

public Link reverse()
{
    Link previous=null;
    Link current=first;
    Link forward;

    while(current!=null)
    {
        forward=current.next;
        current.next=previous;
        previous=current;
        current=forward;
    }
    return previous;
}
}

最佳答案

问题是,reverse() 没有将 first 设置为它的新值,因此链表将被破坏(实际上它将减少到前一个头部元素)。

你应该添加

first = previous;

最后,在返回值之前(或者相反 - 您真的需要返回新的头节点吗?)。

关于java - 反向链表问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5510375/

相关文章:

c - 在没有库函数的情况下反转c中的字符串

java-8 - 在 Java 8 流中使用返回 void 的函数

c - 在C程序中打印链表

c++ - 合并两个排序的链表

c++ - C++中的反向双向链表

java - xpath多标签选择

c++ - 排序节点(链表)C++

java - 如何在保存之前验证嵌入的文档?

java - 无法从 Eclipse 建立到 Hive 的 JDBC 连接

java - 查找数组中两个最小值的索引