伙计们我是新手,我正在学习数据结构。我正在学习堆栈的链表实现,我在下面编写了这段代码来实现。 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。 伙计们请告诉我我错在哪里并纠正我。 感谢
答案 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;
}
}