[英]Single linked list in java
在下面的代碼中,我試圖了解insertFirst()
方法中的一件事,
為什么最后一個語句first =newLink;
而不是first.next=new Link;
會錯嗎? 首先沒有“下一個”嗎?
我知道這段代碼是正確的,而且我知道需要在開頭和所有位置插入一個節點,但是我需要幫助來理解一個語句。
first =newLink;
是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;
}
}
不,是對的:列表在開頭插入了新鏈接。 舊的“第一個”成為新鏈接的“下一個”,而新的鏈接是新的“第一”。
為什么最后一個語句
first =newLink;
而不是first.next=new Link;
因為要插入一個新的第一個元素,而“ next”元素是舊的第一個元素,所以該元素在上一行設置。
首先是= newLink; 和first.next = new鏈接; 不一樣的東西嗎?
號first
是第一和first.next
是第二。
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;
}
}
這是因為您想將新元素放在開頭,因此必須將新元素設置為列表的開頭,並且該元素應指向“ old-head”,然后您將具有:
new_elemnt->old_head->...
LinkedList::first
不是保護元素。 它確實指向列表的第一個元素。 如果LinkedList::first == null
,則列表為空。 如果Link::next == null
,則它是最后一個元素(在這種情況下, null
稱為保護元素 )。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.