<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      DAY3 鏈表part01

       
       

      今日任務(wù)

      ●  鏈表理論基礎(chǔ)

      ●  203.移除鏈表元素

      ●  707.設(shè)計(jì)鏈表

      ●  206.反轉(zhuǎn)鏈表

      鏈表理論基礎(chǔ)

      文章鏈接:https://programmercarl.com/%E9%93%BE%E8%A1%A8%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80.html

       1、循環(huán)鏈表用于解決約瑟夫環(huán)的問(wèn)題

      2、自定義鏈表結(jié)點(diǎn)的結(jié)構(gòu)體

      1 struct LinkNode
      2 {
      3     int val;
      4     LinkNode* next;
      5     LinkNode():val(0),next(NULL) {}//初始化函數(shù)1;
      6     LinkNode(int x):val(x),next(NULL) {}//初始化函數(shù)2;
      7     LinkNode(int x,LinkNode *next):val(0),next(next) {}//初始化函數(shù)3;
      8 }//自定義結(jié)構(gòu)體時(shí)自選

      LinkNode *head= new Linknode(x);

      3、若使用C++默認(rèn)的初始化函數(shù),則初始化不能賦值

      LinkNode *head= new Linknode();//即初始化函數(shù)1

      203.移除鏈表元素

       1 /**
       2  * Definition for singly-linked list.
       3  * struct ListNode {
       4  *     int val;
       5  *     ListNode *next;
       6  *     ListNode() : val(0), next(nullptr) {}
       7  *     ListNode(int x) : val(x), next(nullptr) {}
       8  *     ListNode(int x, ListNode *next) : val(x), next(next) {}
       9  * };
      10  */
      11 class Solution {
      12 public:
      13     ListNode* removeElements(ListNode* head, int val) {
      14             ListNode* dummy=new ListNode(0);
      15             dummy->next=head;
      16             ListNode*p=dummy;
      17             while(p->next!=NULL)
      18             {
      19                 if(p->next->val==val) 
      20                 {
      21                     ListNode* q=p->next;
      22                     p->next=p->next->next;
      23                     delete(q);//注意釋放
      24                 }
      25                 else p=p->next;
      26             }
      27             head=dummy->next;
      28             return head;
      29     }
      30 };

      重點(diǎn)掌握虛擬頭節(jié)點(diǎn)dummy的用法

      題目鏈接/文章講解/視頻講解::https://programmercarl.com/0203.%E7%A7%BB%E9%99%A4%E9%93%BE%E8%A1%A8%E5%85%83%E7%B4%A0.html

       

      707.設(shè)計(jì)鏈表

       1 class MyLinkedList {
       2 public:
       3     struct LinkNode
       4     {
       5         int val;
       6         LinkNode* next;
       7         LinkNode(int x):val(x),next(NULL){};
       8     };
       9     MyLinkedList() {
      10         dummy=new LinkNode(0);
      11         cnt=0;
      12     }//掌握類(lèi)的語(yǔ)法
      13     
      14     int get(int index) {
      15         if(index<0||index>=cnt) return -1;
      16         else
      17         {
      18             LinkNode*p=dummy->next;
      19             while(index--)
      20             {
      21                 p=p->next;
      22             }//p定位到下標(biāo)為index的位置
      23             return p->val;
      24         }
      25     }
      26     
      27     void addAtHead(int val) {
      28         LinkNode*newNode=new LinkNode(val);
      29         newNode->next=dummy->next;
      30         dummy->next=newNode;
      31         cnt++;
      32     }
      33     
      34     void addAtTail(int val) {
      35         LinkNode*newNode=new LinkNode(val);
      36         LinkNode*p=dummy;
      37         while(p->next!=NULL) p=p->next;
      38         p->next=newNode;
      39         cnt++;
      40     }
      41     
      42     void addAtIndex(int index, int val) {
      43         if(index<0||index>cnt) return;
      44         else if(index==cnt) 
      45         {
      46             addAtTail(val);
      47         }
      48         else if(index==0) addAtHead(val);
      49         else 
      50         {
      51             //定位到下標(biāo)為index的結(jié)點(diǎn)前一個(gè)結(jié)點(diǎn)52             LinkNode*p=dummy;
      53             while(index--)
      54             {
      55                 p=p->next;
      56             }
      57             LinkNode* newNode=new LinkNode(val);
      58             newNode->next=p->next;
      59             p->next=newNode;
      60             cnt++;
      61         }
      62     }
      63     
      64     void deleteAtIndex(int index) {
      65         if(index<0||index>=cnt) return ;
      66         else{
      67             LinkNode*p=dummy;
      68             while(index--)
      69             p=p->next;//p指向下標(biāo)為index的結(jié)點(diǎn)前一個(gè)結(jié)點(diǎn)
      70 
      71             LinkNode*q=p->next;
      72             p->next=p->next->next;
      73             delete(q);
      74             cnt--;
      75         }
      76     }
      77     private:
      78     LinkNode*dummy=new LinkNode(0);
      79     int cnt;//定義全局變量
      80 };
      81 
      82 /**
      83  * Your MyLinkedList object will be instantiated and called as such:
      84  * MyLinkedList* obj = new MyLinkedList();
      85  * int param_1 = obj->get(index);
      86  * obj->addAtHead(val);
      87  * obj->addAtTail(val);
      88  * obj->addAtIndex(index,val);
      89  * obj->deleteAtIndex(index);
      90  */

       

      題目鏈接/文章講解/視頻講解:https://programmercarl.com/0707.%E8%AE%BE%E8%AE%A1%E9%93%BE%E8%A1%A8.html

       

      206.反轉(zhuǎn)鏈表

      思路:

       

      解法一:雙指針?lè)?/h3>
       1 class Solution {
       2 public:
       3     ListNode* reverseList(ListNode* head) {
       4         ListNode* temp; // 保存cur的下一個(gè)節(jié)點(diǎn)
       5         ListNode* cur = head;
       6         ListNode* pre = NULL;
       7         while(cur) {
       8             temp = cur->next;  // 保存一下 cur的下一個(gè)節(jié)點(diǎn),因?yàn)榻酉聛?lái)要改變cur->next
       9             cur->next = pre; // 翻轉(zhuǎn)操作
      10             // 更新pre 和 cur指針
      11             pre = cur;
      12             cur = temp;
      13         }
      14         return pre;
      15     }
      16 };

       

      解法二:遞歸 還是一如既往的難以理解

       1 /**
       2  * Definition for singly-linked list.
       3  * struct ListNode {
       4  *     int val;
       5  *     ListNode *next;
       6  *     ListNode() : val(0), next(nullptr) {}
       7  *     ListNode(int x) : val(x), next(nullptr) {}
       8  *     ListNode(int x, ListNode *next) : val(x), next(next) {}
       9  * };
      10  */
      11 class Solution {
      12 public:
      13     ListNode* reverse(ListNode* pre,ListNode*cur) {
      14       if(cur==NULL) return pre;
      15       ListNode*p=cur->next;
      16       cur->next=pre;
      17       return reverse(cur,p);
      18     }//遞歸函數(shù),注意返回值
      19 
      20     ListNode* reverseList(ListNode*head)
      21     {
      22         return reverse(NULL,head);
      23     }//調(diào)用遞歸的函數(shù)
      24 };

      題目鏈接/文章講解/視頻講解:https://programmercarl.com/0206.%E7%BF%BB%E8%BD%AC%E9%93%BE%E8%A1%A8.html

       

      總結(jié):

      鏈表的定義;鏈表的基本操作;鏈表反轉(zhuǎn)的兩種方法

      posted @ 2024-07-19 16:34  xzdmzrc  閱讀(29)  評(píng)論(0)    收藏  舉報(bào)
      主站蜘蛛池模板: 日韩一区二区三区女优丝袜| 大陆熟妇丰满多毛xxxⅹ| 亚洲综合一区二区三区| 亚洲av区一区二区三区| 免费人妻无码不卡中文字幕18禁| 成人综合人人爽一区二区| 中国女人熟毛茸茸A毛片| 免费观看欧美猛交视频黑人| 蜜桃久久精品成人无码av| 亚洲精品不卡无码福利在线观看 | 亚洲精品国模一区二区| 国产毛片欧美毛片久久久| 精品人人妻人人澡人人爽人人| 亚洲午夜福利AV一区二区无码| 国产成人毛片无码视频软件| 天天爽夜夜爽人人爽曰| 最近免费中文字幕mv在线视频3| 91久久偷偷做嫩草影院免费看| 国产精品国产精品国产精品| 精品欧美h无遮挡在线看中文 | 国产视频 视频一区二区| 中文字幕在线国产精品| 人妻熟女欲求不满在线| 熟女国产精品一区二区三| 精品一卡2卡三卡4卡乱码精品视频| 藁城市| 亚洲情色av一区二区| 免费AV手机在线观看片| 91人妻无码成人精品一区91| 国产欧亚州美日韩综合区| 少妇被粗大的猛烈进出动视频| 成人国产一区二区三区精品| 中文字幕日韩有码国产| 欧美巨大极度另类| 国产精品国产三级在线专区| 人人妻人人澡人人爽不卡视频| 老司机性色福利精品视频| 真人无码作爱免费视频| 永靖县| 久久一日本综合色鬼综合色| 久久久精品国产精品久久|