1. 程式人生 > >LeetCode-探索連結串列-設計連結串列

LeetCode-探索連結串列-設計連結串列

設計連結串列

設計連結串列的實現。您可以選擇使用單鏈表或雙鏈表。單鏈表中的節點應該具有兩個屬性: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; }
 * }
 */