Удалить узел перед данным узлом - PullRequest
0 голосов
/ 30 сентября 2018

У меня есть код для удаления определенного узла, но я не могу удалить узел перед данным узлом.Есть идеи, как это сделать с помощью этой функции?(Решение ниже)

void deleBefore(Node q) {
    if (q == null || q == head) {
        return;
    }

    Node p = null;
    Node n = head;
    while (n != null && n.next != q) {
        p = n;
        n = n.next;
    }
    if (n == null) {
        return;
    }

    if (n == head) {
        head = q;
    } else {
        p.next = q;
    }

Класс узла

public class Node {

Boat info;
Node next;

Node() {
}

Node(Boat x, Node p) {
    info = x;
    next = p;
}

Node(Boat x) {
    this(x, null);
}

}

Ответы [ 2 ]

0 голосов
/ 30 сентября 2018

Вам нужно отслеживать предыдущий узел, когда вы просматриваете список в поисках q, затем обновите его next до q, если q был найден, или обновите head. * 1006.*

void deleteBefore(Node q)
{
  if(q == null || q == head) return;

  Node p = null;
  Node n = head;
  while(n != null && n.next != q)
  {
    p = n;
    n = n.next;
  }
  if(n == null) 
    return;

  if(n == head) 
    head = q;
  else 
    p.next = q;
}
0 голосов
/ 30 сентября 2018

Я изменил вашу функцию, надеюсь, это поможет

 void deletePrev(Node q)
 {if(q==null || q==head) return;

  Node p=head;
  while(p!=null && p.next.next!=q) p=p.next;
  if(p==null) return; // q is not in the list
  p.next = q;
  if(p.next.next==null) tail = p;
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...