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,可以在刪除和插入時更加方便的操作。在實際使用中,需要根據具體情況選擇合適的鏈表類型。