色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

java 單向鏈表和雙向鏈表

錢艷冰1年前8瀏覽0評論

Java中的單向鏈表和雙向鏈表是數據結構中常見的鏈式存儲方式,可以在插入和刪除元素時快速操作,相比于數組更加靈活。下面我們來分別介紹一下單向鏈表和雙向鏈表的構建及遍歷方法。

單向鏈表

public class ListNode {
int val;
ListNode next;
ListNode(int x) { val = x; }
 }
public class LinkedList {
private ListNode head;
public LinkedList() {
head = null;
}
public void add(int x) {
ListNode node = new ListNode(x);
if(head==null) {
head = node;
} else {
ListNode temp = head;
while(temp.next != null) {
temp = temp.next;
}
temp.next = node;
}
}
public void print() {
ListNode temp = head;
while(temp != null) {
System.out.print(temp.val + "->");
temp = temp.next;
}
System.out.println("null");
}
 }

上面的代碼中,ListNode表示鏈表中的節點,包括一個值val和一個指向下一個節點的指針next;LinkedList表示單向鏈表,包括一個頭結點head和操作節點的方法add和遍歷鏈表的方法print。

雙向鏈表

public class ListNode {
int val;
ListNode prev;
ListNode next;
ListNode(int x) { val = x; }
 }
public class DoubleLinkedList {
private ListNode head;
public DoubleLinkedList() {
head = new ListNode(-1);
head.prev = null;
head.next = null;
}
public void add(int x) {
ListNode node = new ListNode(x);
ListNode temp = head.next;
while(temp != null && x >temp.val) {
temp = temp.next;
}
if(temp != null) {
node.prev = temp.prev;
node.next = temp;
temp.prev.next = node;
temp.prev = node;
} else {
node.prev = head.prev;
node.next = null;
head.prev.next = node;
head.prev = node;
}
}
public void print() {
ListNode temp = head.next;
while(temp != null) {
System.out.print(temp.val + "<->");
temp = temp.next;
}
System.out.println("null");
}
 }

上述代碼中,ListNode表示雙向鏈表中的節點,包括一個值val和兩個指針prev和next,其中prev指向前一個節點,next指向后一個節點;DoubleLinkedList表示雙向鏈表,包括一個頭結點head和操作節點的方法add和遍歷鏈表的方法print。

總結

單向鏈表和雙向鏈表都是優秀的鏈式存儲方式,區別在于雙向鏈表多了一個指向前一個節點的指針prev,可以在刪除和插入時更加方便的操作。在實際使用中,需要根據具體情況選擇合適的鏈表類型。