gpt4 book ai didi

java - 链表插入使用头部插入

转载 作者:行者123 更新时间:2023-11-29 09:02:33 26 4
gpt4 key购买 nike

好的,我现在遇到的问题是我在“public class MagazineView extends Applet {”处遇到错误,我得到“空白字段 Jlist 可能尚未初始化”

这是我的 GUI 小程序

public class MagazineView extends Applet {
Button button, button2;
final MagazineList Jlist;


public void init() {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//NORTH PANEL
JPanel northPanel = new JPanel(new BorderLayout());
JPanel topPanel = new JPanel(new BorderLayout());
JLabel label = new JLabel("Add Magazine: ");
final JTextField text1 = new JTextField();
JButton button = new JButton("List Magazines");


button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
final String name=text1.getText();
Magazine mag = new Magazine(name);
Jlist.insert(mag);
}

});

topPanel.add(label, BorderLayout.LINE_START);
topPanel.add(text1, BorderLayout.CENTER);
topPanel.add(button, BorderLayout.LINE_END);
//CENTER PANEL
JPanel centerPanel = new JPanel(new BorderLayout());
JTextArea atext = new JTextArea();
centerPanel.add(atext, BorderLayout.CENTER);

//BOTTOM PANEL
JPanel bottomPanel = new JPanel(new BorderLayout());
JLabel label2 = new JLabel("Delete All: ");
JTextField text2 = new JTextField();
JButton button2 = new JButton("Delete Magazine");
bottomPanel.add(label2, BorderLayout.LINE_START);
bottomPanel.add(text2, BorderLayout.CENTER);
bottomPanel.add(button2, BorderLayout.LINE_END);

northPanel.add(topPanel, BorderLayout.NORTH);
northPanel.add(centerPanel, BorderLayout.CENTER);
northPanel.add(bottomPanel, BorderLayout.SOUTH);

//Frame
frame.add(northPanel);
frame.setSize(600, 400);
frame.setVisible(true);

}


}

这是我的方法

      public class MagazineList {
private MagazineNode list;

public MagazineList(){
list=null;
}
public void insert (Magazine mag){
MagazineNode node = new MagazineNode(mag);
node.next = list;
list = node;
}
public void add (Magazine mag){
MagazineNode node = new MagazineNode (mag);
MagazineNode current;

if(list==null)
list = node;
else
{
current = list;
while(current.next !=null)
current = current.next;
current.next = node;
}
}

public void DeleteNode(Magazine mag)
{
if(list == null) throw new RuntimeException("Cannot delete, Empty List");

if( list.magazine.equals(mag) )
{
list = list.next;
return;
}

MagazineNode cur = list;
MagazineNode prev = null;

while(cur != null && !cur.magazine.equals(mag) )
{
prev = cur;
cur = cur.next;
}

if(cur == null) throw new RuntimeException("Cannot delete, not in list");

//delete cur node
prev.next = cur.next;
}

public String toString(){
String result ="";

MagazineNode current = list;

while (current !=null){
result += current.magazine + "\n";
current = current.next;
}

return result;
}

private class MagazineNode {
public Magazine magazine;
public MagazineNode next;

public MagazineNode(Magazine mag){
magazine = mag;
next = null;
}
}
}

最佳答案

如果是在头部插入节点,则不需要遍历链表。您的 list 变量是链表的头部,因此让您的新节点指向它并使其成为头部。

/**
* Add a new node containing the input Magazine to the front of the linked list.
*
* @param mag A magazine to put at the head of the list.
*/
public void add (Magazine mag){
MagazineNode node = new MagazineNode(mag);
node.next = list;
list = node;
}

您可能希望将名称 list 更改为 head。请注意,这不需要任何 if 语句。顺便说一下,您不必显示 GUI 代码。

关于java - 链表插入使用头部插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16493054/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com