如何在双链表中添加和删除Node First和删除Node Last 只想先添加删除节点,最后删除节点。我不知道如何在你的程序中添加它,但我想帮助它解决它
我有 3 个班
类节点。 类 doubleLinkedListMain 。 类 doubleLinkedList 。
我想在类doubleLinkedList中添加特殊的编程,这个先删除节点,最后删除节点
class doublyLinkedList
{
Node head;
public void push(int newdata)
{
Node NewNode = new Node(newdata);
NewNode.next = head;
NewNode.prev = null;
if (head != null) head.prev = NewNode;
head = NewNode;
}
public void insertAfter(Node PrevNode, int newdata)
{
if (PrevNode == null)
{
System.out.println("The given previous node cannot be null");
return;
}
Node NewNode = new Node(newdata);
NewNode.next = PrevNode.next;
PrevNode.next = NewNode;
NewNode.prev = PrevNode;
if (NewNode.next != null)
NewNode.next.prev = NewNode;
}
public void append(int newdata)
{
Node NewNode = new Node(newdata);
Node last = head;
NewNode.next = null;
if (head == null)
{
NewNode.prev = null;
head = NewNode;
return;
}
while (last.next != null) last = last.next;
last.next = NewNode;
NewNode.prev = last;
return;
}
void insertBefore(Node NextNode, int newdata)
{
if (NextNode == null)
{
System.out.println("the given next node cannot be NULL");
return;
}
Node NewNode = new Node(newdata);
NewNode.data = newdata;
NewNode.prev = NextNode.prev;
NextNode.prev = NewNode;
NewNode.next = NextNode;
if (NewNode.prev != null)
NewNode.prev.next = NewNode;
else head = NewNode;
}
void deleteNode( Node del)
{
if (head == null || del == null) return;
if (head == del) head = head.next;
if (del.next != null) del.next.prev = del.prev;
if (del.prev != null) del.prev.next = del.next;
return;
}
void printList()
{
Node n = head;
while (n != null)
{
System.out.print(n.data+" ");
n = n.next;
}
System.out.print(" \n ") ;
}
}
答案 0 :(得分:0)
抱歉,您的代码中有不同的错误。首先,对于列表,您需要两个或三个指针作为 List 类中的属性(Node head /* begin */, tail /* end */, current /* yes, the current element on which you have access */
- 我已经使用当前指针学习了它,但根据您的实现,您也可以在没有它的情况下完成)。因此,您必须更改一些代码。例如,您需要一个 hasAccess() : boolean 方法,如果您使用 current
指针,return current != null
和您的方法必须考虑并使用 tail
。此外,您应该添加一个方法 isEmpty()
:
public boolean isEmpty() {
return head == null;
}
此方法检查列表是否为空。在列表为空的情况下(该方法返回 true
),您不能做一些事情,但您已经看到了。但是,由于新的指针尾部,您可以更轻松地删除最后一个节点(见下文)。
请将您的所有属性更改为 private
并为每个属性编写一个 getter 和一个 setter。例如在类 Node 中的属性 next:
private Node next;
// other code...
public Node getNext() {
return next;
}
public void setNext(Node next) {
this.next = next;
}
我已经通过以下方式解决了“先删除节点,最后删除节点”的问题:
public class DoublyLinkedList {
private Node head; // begin
private Node tail; // end
public void deleteFirstElement() {
if (!isEmpty()) {
head = head.getNext();
}
}
public void deleteLastElement() {
if (!isEmpty()) {
tail = tail.getPrev();
}
}
// other code
}
当然,你必须证明你的其他代码,如果它有效。希望能帮到你。