tmg*_*mgr 3 java algorithm linked-list data-structures
我正在尝试删除链表的最后一个节点,只给出了指向该节点的指针。
我写了下面的实现,但是没有用。
我已经访问了有关此主题的大多数SO问题,但是如果只有一个指向该节点的指针,它们都没有显示如何删除链表的最后一个节点?
我在这里想念什么吗?
class Node {
Node next;
int value;
Node(int val) {
this.value = val;
this.next = null;
}
@Override
public String toString() {
Node cur = this;
String str = "";
while(cur != null) {
str += cur.value+"->";
cur = cur.next;
}
return str;
}
}
class DeleteNodeLL {
public static void deleteNode(Node current) {
Node temp;
if(current.next == null) {
current = null;
return;
} else {
current.value = current.next.value;
temp = current.next;
temp = null;
current.next = current.next.next;
}
}
public static void main(String [] args) {
Node n1 = new Node(25);
Node n2 = new Node(1);
Node n3 = new Node(36);
Node n4 = new Node(9);
Node n5 = new Node(14);
n1.next = n2;
n2.next = n3;
n3.next = n4;
n4.next = n5;
n5.next = null;
System.out.println("Original linkedlist :");
System.out.println(n1);
System.out.println();
System.out.println("After deleting a node :");
deleteNode(n5);
System.out.println(n1);
}
}
Run Code Online (Sandbox Code Playgroud)
输出:-
原始链表:
25-> 1-> 36-> 9-> 14->删除节点后:
25-> 1-> 36-> 9-> 14->
使用单链列表是不可能的。
这是在Big Shot公司中通常会提出的面试问题,这些问题侧重于数据结构。
问题被表述为“删除仅给出指向该节点的指针的单个链表中的节点”的
预期解决方案:
public void deleteNode(Node n)
{
if(n==null || n.next==null)
{
System.out.println("Delete not possible");
return;
}
n.data = n.next.data;
Node tmp = n.next;
n.next = n.next.next;
tmp.next = null;
System.out.println("Node Deleted");
}
Run Code Online (Sandbox Code Playgroud)
这个想法是将数据从下一个节点复制到当前节点,然后删除下一个节点。如果该节点是最后一个节点,则该解决方案不起作用(这是候选人必须在面试中讨论并指出的问题)
希望对您有帮助!(解决问题的方法很棘手,并且不存在)