反转链接列表[英] Reversing a linked list

问题描述

在不使用递归的情况下反转链表的问题.

我使用了这种方法,但是当我尝试将其运行回家时,即使该功能看起来不错,我也无法打印链表的反向它继续以与它相同的方式打印链表之前做过.

谁能帮我理解这里出了什么问题??

class link {
    int data;
    public link nextlink;

    link(int d1) {
        data = d1;
    }
}

class List{

    link head;
    link revhead;

    List(){
        head = null;
    }

    boolean isEmpty(link head) {
       return head==null;
    }

    void insert(int d1) {
        link templink = new link(d1);
        templink.nextlink = head;
        head = templink;
    }

    void printlist(){
        link head1 = head;
        while(!isEmpty(head1)) {
            System.out.print(head1.data + " ");
            head1 = head1.nextlink;
        }
        System.out.println();
    }

    void reverse() {
        link previous=null,temp=null;
        while(isEmpty(head)) {
            temp = head.nextlink;
            head.nextlink = previous;
            previous = head;
            head = temp;
        }
    }

}

public class LinkedList {

    public static void main(String[] args) {

        List list1 = new List();

        list1.insert(10);
        list1.insert(20);
        list1.insert(30);
        list1.insert(40);
        list1.insert(50);
        list1.printlist();
        list1.reverse();
        list1.printlist();
     }
}

推荐答案

你的代码有两个问题.一:你检查 isEmpty(head),你应该检查 !isEmpty(head).第二:当你解决第一个问题时,循环终止时'head'变为null.

解决以上两个问题的正确代码:

void reverse() {
    link previous = null, temp = null;
    while (!isEmpty(head)) {
        temp = head.nextlink;
        head.nextlink = previous;
        previous = head;
        if (temp == null) {
           break;
        }
        head = temp;
    }

}

本文地址:https://www.itbaoku.cn/post/978667.html