日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

链表-单向链表的实现

發布時間:2024/1/1 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 链表-单向链表的实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

單向鏈表的實現重點在

1. 定義節點,數據變量及指向下一個指針的變量

2. 定義鏈表類 頭結點變量,初始化時默認為null

3. 搜索下標值,循環遍歷下標個節點,獲取節點的值

4. 插入頭結點, 創建新節點,將新節點的下一個節點指向頭結點,頭結點指向新節點

5. 插入尾結點,循環遍歷到最后一個節點,最后一個節點的下一個節點執行新節點

6. 插入指定下標節點, 循環遍歷下標-1個節點,創建新節點,將新節點的下一個節點指向目標位置的前一個節點的下一個節點,將目標位置的前一個節點的下一個節點指向新節點

7. 刪除執行下標節點, 循環遍歷下標-1個節點,將下標-1個節點的下一個節點執行目標位置前一個節點的下一個節點的下一個節點

public class MyLinkedList {/*** 定義列表節點, 包括節點的數據及指向下一個節點的指針*/class Node{int val;Node next;public Node(int val){this.val = val;}}/*** 定義頭結點*/Node head;/*** 初始化頭結點*/public MyLinkedList() {this.head = null;}/*** 獲取指定下標值* @param index* @return*/public int get(int index) {// 如果下標不合法,則直接返回-1if(index<0){return -1;}// 定義臨時節點存儲頭結點Node p = head;// 循環遍歷 下標 個 節點for(int i=0;i<index && p!=null;i++){p = p.next;}// 如果已經越界則返回-1if(p==null){return -1;}// 如果有對應下標的節點,則返回對應值return p.val;}/*** 在頭結點插入節點* @param val*/public void addAtHead(int val) {// 創建新節點Node node = new Node(val);// 將新節點的下一個節點指向頭結點node.next = head;// 頭結點指向新節點head = node;}/*** 在尾部插入節點* @param val*/public void addAtTail(int val) {// 如果頭結點為空,則直接賦值頭結點if(head==null){head = new Node(val);return;}// 創建臨時節點指向頭結點Node p =head;// 循環下一個節點直至下一個節點為空while(p.next!=null){p = p.next;}// 下一個節點指向新節點p.next = new Node(val);}/*** 指定下標插入節點* @param index* @param val*/public void addAtIndex(int index, int val) {// 如果下標小于等于0,則插入頭部if(index<=0){addAtHead(val);return;}// 定義長度變量int len=0;// 定義臨時節點執行頭結點Node p = head;// 遍歷所有節點至最后獲取長度while(p!=null){p = p.next;len++;}// 如果下標等于鏈表長度,則插入鏈尾if(len == index){addAtTail(val);return;}// 如果下標超過鏈表長度,則不處理if(index > len){return;}//定義臨時節點指向頭結點p = head;// 循環遍歷下標個-1個節點,獲取目標位置的前節點for(int i=0;i<index-1;i++){p = p.next;}// 定義新節點Node node = new Node(val);// 將新節點的下一個節點執行目標位置前一個節點的下一個節點node.next = p.next;// 將目標節點的前一個節點指向新節點p.next = node;}/*** 刪除執行下標節點* @param index*/public void deleteAtIndex(int index) {// 定義長度變量int len = 0;// 定義臨時節點變量指向頭節點Node p = head;// 循環遍歷獲取長度while (p!=null){len++;p = p.next;}// 如果刪除下標合法范圍內, 則給予處理if(index>=0 &&index<len){// 如果刪除為頭部,則直接將頭結點指向下一個節點if(index == 0){head = head.next;return;}// 定義臨時節點變量指向頭結點p=head;// 循環遍歷 下標-1個節點for(int i=0;i<index-1;i++){p = p.next;}// 將刪除目標位置的前一個節點的下一個節點指向// 前一個節點的下一個節點的下一個節點p.next = p.next.next;}} }

總結

以上是生活随笔為你收集整理的链表-单向链表的实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。