如何添加它首先删除节点并最后删除节点

时间:2021-02-18 16:03:45

标签: java

如何在双链表中添加和删除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 ") ;
} 
}

1 个答案:

答案 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
}

当然,你必须证明你的其他代码,如果它有效。希望能帮到你。

相关问题