最近在牛客網上練習在線編程,但願本身堅持下去,天天都堅持下去練習,給本身一個沉澱,很少說了java
我遇到了一個用java實現單鏈表的題目,就本身在作題中將單鏈表完善了一下,但願你們做爲參考也熟悉一下,本身node
比較喜歡用java語言,因此就使用java實現單鏈表了。編程
爲了方便,帶頭結點的單鏈表更容易操做和使用,即第一個節點不存儲值,能夠存儲一些標記等測試
/** * @ProjectName: JavaPractice * @Package: com.itwang.swordtooffer * @ClassName: ListNode * @Author: JikeWang * @Description:ListNode是一個帶頭結點的單鏈表,頭結點不存值 * @Date: 2018-11-19 15:46 * @Version: 1.0 */ public class ListNode { int val;//節點的值 ListNode next = null;//節點的指針 ListNode(int val){ this.val = val; } }
/** * @ProjectName: JavaPractice * @Package: com.itwang.swordtooffer * @ClassName: LNodeOperation * @Author: JikeWang * @Description: * @Date: 2018-11-19 15:56 * @Version: 1.0 */ public class LNodeOperation { //將一個新節點添加到鏈表尾部 public static void addNode(ListNode listNode, ListNode node){ //若是鏈表是一個空鏈表,則將此節點賦給鏈表 if (listNode == null) listNode = node; if (listNode != null){ while (listNode.next != null){ listNode = listNode.next; } listNode.next = node; } } //將node2節點插入到node1後面 public static void addNode(ListNode listNode, ListNode node1, ListNode node2){ ListNode currNode; while(listNode.next != null){ currNode = listNode.next; if (currNode.val == node1.val){ //注意這裏須要先將插入的節點的next指向鏈表插入位置後面 //再將插入位置的next指向插入節點 node2.next = currNode.next; listNode.next.next = node2; break; } listNode = currNode; } } //刪除鏈表中的某個值(此鏈表頭結點不存入值) public static void removeNode(ListNode listNode, ListNode node){ ListNode currNode; while (listNode.next != null) { currNode = listNode.next; if (currNode.val == node.val){ listNode.next = currNode.next; } listNode = currNode; } } //從頭部到尾部打印出鏈表的值(跳過鏈表的頭結點) public static void showListNode(ListNode listNode){ listNode = listNode.next; while (listNode != null){ System.out.println(listNode.val); listNode = listNode.next; } } //獲取鏈表的長度 public static int getLenOfLNode(ListNode listNode){ int len = 0; listNode = listNode.next; while (listNode != null){ len++; listNode = listNode.next; } return len; } public static void main(String[] args) { //建立一個頭結點 ListNode listNode = new ListNode(000); //建立三個節點,爲後面測試使用 ListNode l1 = new ListNode(1); ListNode l2 = new ListNode(5); ListNode l3 = new ListNode(4); addNode(listNode, l1); addNode(listNode, l2); addNode(listNode, l3); showListNode(listNode); System.out.println("====================="); System.out.print("鏈表的長度爲:"); System.out.println(getLenOfLNode(listNode)); System.out.println("====================="); System.out.println("刪除l2節點:"); removeNode(listNode, l2); showListNode(listNode); System.out.println("====================="); System.out.println("插入l2節點"); addNode(listNode, l1, l2); showListNode(listNode); } }