我正在尝试删除LinkedList中的最后一个节点。 输入:1,2,3 输出应为:1,2
我可以删除节点,但有更好/更有效的方法吗?
请检查removeLastNode()
方法。
public class MyLinkedList {
Node head;
Node tail;
public void add(int number){
Node node=new Node();
node.setNumber(number);
if(head==null){
head=node;
tail=node;
}
else{
tail.next=node;
tail=node;
}
}
public void removeLastNode(){
Node temp=head;
Node head1=null;
Node tail1=null;
while(temp.next!=null){
Node node=new Node();
node.number=temp.number;
if(head1==null){
head1=node;
tail1=node;
}
else{
tail1.next=node;
tail1=node;
}
if(temp.next.next==null){
temp.next=null;
break;
}
temp=temp.next;
}
head=head1;
}
@Override
public String toString(){
while(head!=null){
System.out.print(head.getNumber()+" ");
head=head.getNext();
}
return "";
}
public static void main(String ar[]){
MyLinkedList list=new MyLinkedList();
list.add(1);
list.add(2);
list.add(3);
list.removeLastNode();
System.out.println(list);
}
public class Node{
Node next;
int number;
public Node getNext() {
return next;
}
public void setNext(Node next) {
this.next = next;
}
public int getNumber() {
return number;
}
public void setNumber(int number) {
this.number = number;
}
}
}
答案 0 :(得分:1)
向Node previous
添加Node
属性,向LinkedList添加Node last
以获取DoubleLinkedList。
然后你可以做类似
的事情Node temp = List.getLast().getPrevious(); //returns the second last item
List.removeLast(); //sets the last item to null
List.setLast(temp); //sets the last item to the second last item
List.getLast().setNext(null);
答案 1 :(得分:0)
使用tail
是最后一个节点。
public void removeLastNode() {
if (head == null) {
throw new IllegalStateException();
}
if (head == tail) {
head = null;
tail = null;
} else {
Node current = head;
while (current.next != tail) {
current = current.next;
}
current.next = null;
tail = current;
}
}
答案 2 :(得分:0)
是的,您可以通过跟踪上一个节点来从链接列表中删除最后一个节点。
public int deleteAtLast() {
if (head == null) {
return 0;
} else {
Node prevoursNode = null;
Node n = head;
while (n.next != null) {
prevoursNode=n;
n = n.next;
}
int data = n.data;
prevoursNode.next=null;
return data;
}
}