LeetCode-探索連結串列-設計連結串列
阿新 • • 發佈:2018-12-11
設計連結串列
設計連結串列的實現。您可以選擇使用單鏈表或雙鏈表。單鏈表中的節點應該具有兩個屬性:val
和 next
。
val
是當前節點的值,next
是指向下一個節點的指標/引用。
public class MyLinkedList { //單鏈表結點類 public class Node{ public int val; public Node next; //例項構造器 public Node(int item) => val=item; }//頭結點和數量 public Node head; public int count; public int Get(int index) { if(index>=count) return -1;//判斷索引是否越界 Node p=head; int num=0; //遍歷連結串列,找到索引指向的結點位置,返回該結點的值 while(true){ if(num==index) return p.val; num++; p=p.next; } }public void AddAtHead(int val) { Node p=new Node(val);//更新head p.next=head; head=p; count++; } public void AddAtTail(int val) { Node p=new Node(val); Node q=head; //遍歷連結串列找到尾部,新增節點 while(q.next!=null) q=q.next; q.next=p; count++; } public void AddAtIndex(int index, int val) { //索引為0直接執行在頭結點前新增結點的方法 if(index==0){ AddAtHead(val); return; } //索引和連結串列長度相直接執行在尾部新增結點的方法 if(index==count){ AddAtTail(val); return; } if(index>=count) return;//索引越界直接返回 int num=0; Node p=head; //迴圈遍歷,在索引指向結點之前新增結點 while(true){ num++; if(num==index){ Node q=new Node(val); q.next=p.next; p.next=q; count++; return; } p=p.next; } } public void DeleteAtIndex(int index) { if(index>=count) return;//索引越界直接返回 int num=0; Node p=head; //遍歷連結串列,刪除索引指向的結點 while(true){ num++; if(num==index){ p.next=p.next.next; count--; return; } p=p.next; } } }
單鏈表節點類
LeetCode筆記中連結串列相關題目,若不單獨說明,程式碼中使用的連結串列都是單鏈表,其節點類如下程式碼所示。
/** * Definition for singly-linked list. * public class ListNode { * public int val; * public ListNode next; * public ListNode(int x) { val = x; } * } */