使用Pop的堆栈删除错误的链接列表实现

时间:2018-01-15 16:20:16

标签: java data-structures linked-list stack

伙计们我是新手,我正在学习数据结构。我正在学习堆栈的链表实现,我在下面编写了这段代码来实现。 push方法工作正常,但pop方法不能正常工作,并且不会删除节点。

public class Slink {
    Node head;
    public void push(int data)
    {
        Node node =new Node();
        node.data=data;
        node.next=null;
        if(head==null)
        {
            head=node;

        }
        else
        {
            Node n=head;
            while (n.next!=null)
            {
                n=n.next;
            }
            n.next=node;
        }

    }
    public void pop()
    {
        if(head==null)
        {
            System.out.println("Stack has 0 items .. cant delete");
        }
        else {
            Node n = head;
            while (n.next != null) {
                n = n.next;
            }
            n=null;


        }
    }
    public void show()
    {
        Node n=head;
        while(n.next!=null)
        {
            System.out.println(n.data);
            n=n.next;
        }
        System.out.println(n.data);
    }
}

现在在课堂上使用它。

public class Sll {
    public static void main(String[] args) {
        Slink stk=new Slink();
        stk.push(4);
        stk.push(54);

        stk.push(23);
        stk.push(90);

        stk.pop();

        stk.show();

    }
}

输出是 4 54 23 90

虽然应该删除90。 伙计们请告诉我我错在哪里并纠正我。 感谢

3 个答案:

答案 0 :(得分:1)

n=null;方法中的

pop()仅修改了作用域n变量的值。您将要在最后一个非空的节点上设置n.next=null

可以通过以下方式完成,例如:

public void pop()
{
    if(head==null)
    {
        System.out.println("Stack has 0 items .. cant delete");
    }
    else if(head.next == null) {
        head = null;
    }
    else {
        Node n = head;
        while (n.next != null && n.next.next != null) {
            n = n.next;
        }
        n.next=null;
    }
}

你可以尝试here。 (我还修复了show()方法以正确处理空堆栈)

答案 1 :(得分:0)

在pop方法中而不是:

Node n = head;
while (n.next != null) {
    n = n.next;
}
n=null;

尝试:

head = head.next();

答案 2 :(得分:0)

实际上,你没有提到你的node(),类。看来你没有制作链接列表所必需的尾节点。 我认为这段代码肯定能帮到你

Pop()方法

 public void pop() {
    node current = header;
    node back = null;
    while ((current != null)) {
        if ((current == tail)) {
            back.next = null;
            tail = back;
            break;
        }
        else {
            back = current;
            current = current.next;
        }

节点类

类节点{

public int data;

public node next;

public node(int data) {
    this.data = this.data;
    this.next = null;
}
}

推送方法

中进行一些更改
public void push(int data) {
    node nnew = new node(data);
    if ((header == null)) {
        header = nnew;
        tail = nnew;
    }
    else {
        tail.next = nnew;
        tail = tail.next;
    }
    }