最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

力扣:707. 設(shè)計鏈表

2023-03-25 15:11 作者:薄荷硬糖醬  | 我要投稿

題目:

??

707. 設(shè)計鏈表

你可以選擇使用單鏈表或者雙鏈表,設(shè)計并實現(xiàn)自己的鏈表。

單鏈表中的節(jié)點應(yīng)該具備兩個屬性:val?和?next?。val?是當(dāng)前節(jié)點的值,next?是指向下一個節(jié)點的指針/引用。

如果是雙向鏈表,則還需要屬性?prev?以指示鏈表中的上一個節(jié)點。假設(shè)鏈表中的所有節(jié)點下標(biāo)從?0?開始。

實現(xiàn)?MyLinkedList?類:

  • MyLinkedList()?初始化?MyLinkedList?對象。

  • int get(int index)?獲取鏈表中下標(biāo)為?index?的節(jié)點的值。如果下標(biāo)無效,則返回?-1?。

  • void addAtHead(int val)?將一個值為?val?的節(jié)點插入到鏈表中第一個元素之前。在插入完成后,新節(jié)點會成為鏈表的第一個節(jié)點。

  • void addAtTail(int val)?將一個值為?val?的節(jié)點追加到鏈表中作為鏈表的最后一個元素。

  • void addAtIndex(int index, int val)?將一個值為?val?的節(jié)點插入到鏈表中下標(biāo)為?index?的節(jié)點之前。如果?index?等于鏈表的長度,那么該節(jié)點會被追加到鏈表的末尾。如果?index?比長度更大,該節(jié)點將?不會插入?到鏈表中。

  • void deleteAtIndex(int index)?如果下標(biāo)有效,則刪除鏈表中下標(biāo)為?index?的節(jié)點。

?

示例:

輸入["MyLinkedList", "addAtHead", "addAtTail", "addAtIndex", "get", "deleteAtIndex", "get"] [[], [1], [3], [1, 2], [1], [1], [1]]輸出[null, null, null, null, 2, null, 3]解釋MyLinkedList myLinkedList = new MyLinkedList(); myLinkedList.addAtHead(1); myLinkedList.addAtTail(3); myLinkedList.addAtIndex(1, 2); ? ?// 鏈表變?yōu)?1->2->3 myLinkedList.get(1); ? ? ? ? ? ? ?// 返回 2 myLinkedList.deleteAtIndex(1); ? ?// 現(xiàn)在,鏈表變?yōu)?1->3 myLinkedList.get(1); ? ? ? ? ? ? ?// 返回 3

?

提示:

  • 0 <= index, val <= 1000

  • 請不要使用內(nèi)置的 LinkedList 庫。

  • 調(diào)用?get、addAtHead、addAtTail、addAtIndex?和?deleteAtIndex?的次數(shù)不超過?2000?。


注意:

  1. 不要粗心操作空指針,如果要將鏈表的下一個值賦給一個指針,并需要使用這個指針要注意會不會是一個空指針

  2. 在某個特定的序號上做操作可以讓循環(huán)一直進行,用if語句來判斷指針是否到達要操作的地方。

第一種法:


typedef?struct?MyLinkedList{

????int?val;

????struct?MyLinkedList?*next;

}?MyLinkedList;


MyLinkedList*?myLinkedListCreate()?{

????MyLinkedList?*head?=?(MyLinkedList?*)malloc(sizeof(MyLinkedList));

????head->next?=?NULL;

????return?head;

}


int?myLinkedListGet(MyLinkedList*?obj,?int?index)?{

????MyLinkedList?*cur?=?obj->next;

????for(int?i=0;cur!=NULL;i++){

????????if(i==index){

????????????return?cur->val;

????????}else{

????????????cur=cur->next;

????????}

????}

????return?-1;

}


void?myLinkedListAddAtHead(MyLinkedList*?obj,?int?val)?{

????MyLinkedList?*nhead?=?(MyLinkedList?*)malloc(sizeof(MyLinkedList));

????nhead->val?=?val;

????nhead->next?=?obj->next;

????obj->next?=?nhead;

}


void?myLinkedListAddAtTail(MyLinkedList*?obj,?int?val)?{

????MyLinkedList?*ntail?=?(MyLinkedList*)malloc(sizeof(MyLinkedList));

????MyLinkedList?*cur?=?obj;

????ntail->val?=?val;

????ntail->next?=?NULL;

????while(cur->next!=NULL)cur?=?cur->next;

????cur->next?=?ntail;

}


void?myLinkedListAddAtIndex(MyLinkedList*?obj,?int?index,?int?val)?{

????MyLinkedList?*newnode?=?(MyLinkedList?*)malloc(sizeof(MyLinkedList));

????newnode->val?=?val;

????if(index==0){

????????newnode->next?=?obj->next;

????????obj->next?=?newnode;

????????return;

????}

????MyLinkedList?*cur?=?obj->next;

????for(int?i=1;cur!=NULL;i++){

????????if(i==index){

????????????newnode->next?=?cur->next;

????????????cur->next=newnode;

????????????return;

????????}else{

????????????cur=cur->next;

????????}

????}

}


void?myLinkedListDeleteAtIndex(MyLinkedList*?obj,?int?index)?{

????MyLinkedList?*cur=obj;

????MyLinkedList?*tmp;

????for(int?i=0;cur!=NULL&&cur->next!=NULL;i++){

????????if(index==i){

????????????tmp?=?cur->next;

????????????cur->next?=?tmp->next;

????????????free(tmp);

????????????return;

????????}else{

????????????cur=cur->next;

????????}

????}

}


void?myLinkedListFree(MyLinkedList*?obj)?{

????MyLinkedList?*tmp;

????while(obj!=NULL){

????????tmp?=?obj;

????????obj=obj->next;

????????free(tmp);

????}

????return;

}


/**

?*?Your?MyLinkedList?struct?will?be?instantiated?and?called?as?such:

?*?MyLinkedList*?obj?=?myLinkedListCreate();

?*?int?param_1?=?myLinkedListGet(obj,?index);

?

?*?myLinkedListAddAtHead(obj,?val);

?

?*?myLinkedListAddAtTail(obj,?val);

?

?*?myLinkedListAddAtIndex(obj,?index,?val);

?

?*?myLinkedListDeleteAtIndex(obj,?index);

?

?*?myLinkedListFree(obj);

*/


力扣:707. 設(shè)計鏈表的評論 (共 條)

分享到微博請遵守國家法律
张家川| 宝鸡市| 阳山县| 杨浦区| 香港| 卓尼县| 建始县| 砚山县| 云南省| 平度市| 拜城县| 金川县| 南投市| 黑龙江省| 宕昌县| 仪征市| 青铜峡市| 宝兴县| 德令哈市| 开江县| 古浪县| 满洲里市| 海城市| 崇阳县| 和顺县| 东丰县| 华容县| 二连浩特市| 泸溪县| 福建省| 老河口市| 淮北市| 南平市| 焉耆| 巨野县| 来凤县| 敖汉旗| 伊吾县| 平阳县| 奉节县| 丰县|