在下面的代码中,我试图理解insertFirst()
方法中的一件事
为什么最后一个语句first =newLink;
而不是first.next=new Link;
会不会错?首先不是“下一个”吗?
我知道这段代码是正确的,我知道一个节点需要在开头插入所有节点,但我需要帮助理解一个语句。
first =newLink;
和first.next=new Link;
不一样吗?
public class LinkedList {
private Link first;
public LinkedList()
{
first = null;
}
public boolean isEmtpy()
{
return(first==null);
}
public void insertFirst(int id, int dd)
{
Link newLink=new Link(id,dd);
newLink.next=first;
first =newLink;
}
}
答案 0 :(得分:3)
不,它是正确的:列表在开头插入新链接。旧的“第一个”成为新链接的“下一个”,新链接是新的“第一个”。
答案 1 :(得分:2)
为什么最后一个语句
first =newLink;
而不是first.next=new Link;
因为您正在插入新的第一个元素而“next”元素是旧的第一个元素,它是在上一行中设置的。
是first = newLink;和first.next = new Link;不一样吗?
没有。 first
是第一个,first.next
是第二个。
答案 2 :(得分:0)
这是因为你想把新元素放到开头,所以你必须将新元素设置到列表的头部,这个元素应该指向“old-head”,然后你有:
new_elemnt->old_head->...
答案 3 :(得分:0)
LinkedList::first
不是警卫元素。它确实指向列表的第一个元素。如果LinkedList::first == null
,则列表为空。如果Link::next == null
,则它是最后一个元素(在这种情况下,null
被称为警卫元素)。
答案 4 :(得分:0)
Java中的SingleLinkedList的简单示例
package com.ds;
public class SingleLinkedList {
private Node head;
public static void main(String[] args) {
SingleLinkedList linkedList = new SingleLinkedList();
linkedList.insert(5);
linkedList.insert(15);
linkedList.insert(45);
linkedList.insert(55);
linkedList.insert(58);
linkedList.insert(25);
// Print value of Single Linked list.
linkedList.print();
// delete node from tail side.
linkedList.delete();
linkedList.delete();
linkedList.delete();
linkedList.delete();
linkedList.delete();
/*linkedList.delete();
linkedList.delete();
linkedList.delete();
linkedList.delete();*/
linkedList.print();
}
SingleLinkedList() {
head = null;
}
void insert(int val) {
Node temp = new Node();
temp.data = val;
temp.next = null;
if (head == null) {
head = temp;
} else {
Node k = head;
while (k.next != null) {
k = k.next;
}
k.next = temp;
}
}
// delete from tail.
void delete() {
// if it's first node
if (head == null || head.next == null) {
head = null;
} else {
Node n = head;
Node t = head;
while (n.next != null) {
t = n;
n = n.next;
}
t.next = null;
}
}
void print() {
Node k = head;
while (k != null) {
System.out.println(k.data);
k = k.next;
}
}
Node reverse() {
Node h = head;
Node p = null;
Node t = null;
while (h != null) {
t = h.next;
h.next = p;
p = h;
h = t;
}
return p;
}
class Node {
private int data;
private Node next;
}
}