abby:python 阿里口碑商家流量分析
阿新 • • 發佈:2022-12-07
設計連結串列的實現。您可以選擇使用單鏈表或雙鏈表。單鏈表中的節點應該具有兩個屬性:val
和 next
。val
是當前節點的值,next
是指向下一個節點的指標/引用。如果要使用雙向連結串列,則還需要一個屬性 prev
以指示連結串列中的上一個節點。假設連結串列中的所有節點都是 0-index 的。
在連結串列類中實現這些功能:
- get(index):獲取連結串列中第
index
個節點的值。如果索引無效,則返回-1
。 - addAtHead(val):在連結串列的第一個元素之前新增一個值為
val
的節點。插入後,新節點將成為連結串列的第一個節點。 - addAtTail(val):將值為
val
的節點追加到連結串列的最後一個元素。 - addAtIndex(index,val):在連結串列中的第
index
個節點之前新增值為val
的節點。如果index
等於連結串列的長度,則該節點將附加到連結串列的末尾。如果index
大於連結串列長度,則不會插入節點。如果index
小於0,則在頭部插入節點。 -
deleteAtIndex(index):如果索引
index
有效,則刪除連結串列中的第index
個節點。
示例:
MyLinkedList linkedList = new MyLinkedList(); linkedList.addAtHead(1); linkedList.addAtTail(3); linkedList.addAtIndex(1,2); //連結串列變為1-> 2-> 3 linkedList.get(1); //返回2 linkedList.deleteAtIndex(1); //現在連結串列是1-> 3 linkedList.get(1); //返回3
1 struct Listnode{ 2 int val; 3 Listnode* next; 4 Listnode() : val(0), next(nullptr) {} 5 Listnode(int x) : val(x), next(nullptr) {} 6 Listnode(int x, Listnode* next) : val(x), next(next) {} 7 }; 8 class MyLinkedList { 9 struct Listnode* head; 10 int size; 11 public: 12 MyLinkedList() { 13 head = new Listnode(); 14 size = 0; 15 } 16 17 int get(int index) { 18 if(index> size-1||index<0) return -1; 19 Listnode* cur = head; 20 for(int i = 0; i <= index ; i++ ) 21 { 22 cur = cur->next; 23 } 24 return cur->val; 25 } 26 27 void addAtHead(int val) { 28 Listnode* cur = head->next; 29 Listnode* dummy_head = new Listnode(val,cur); 30 head->next = dummy_head; 31 size++; 32 return; 33 } 34 35 void addAtTail(int val) { 36 Listnode* cur = head; 37 while(cur->next) 38 { 39 cur = cur->next; 40 } 41 Listnode *newnode = new Listnode(val); 42 cur->next = newnode; 43 size++; 44 return; 45 } 46 47 void addAtIndex(int index, int val) { 48 Listnode* cur = head; 49 if(index>size) return; 50 if(index<0) 51 { 52 addAtHead(val); 53 return; 54 } 55 if(index==size) 56 { 57 addAtTail(val); 58 return; 59 } 60 for(int i = 0; i < index; i++) 61 { 62 cur = cur->next; 63 } 64 Listnode* newnode = new Listnode(val,cur->next); 65 cur->next = newnode; 66 size++; 67 return; 68 } 69 70 void deleteAtIndex(int index) { 71 if(index<0||index>size-1) return; 72 Listnode* pre = head; 73 for(int i = 0; i <index; i++) 74 { 75 pre = pre->next; 76 } 77 Listnode* cur = pre->next; 78 pre->next=cur->next; 79 delete cur; 80 size--; 81 return; 82 } 83 }; 84 /** 85 * Your MyLinkedList object will be instantiated and called as such: 86 * MyLinkedList* obj = new MyLinkedList(); 87 * int param_1 = obj->get(index); 88 * obj->addAtHead(val); 89 * obj->addAtTail(val); 90 * obj->addAtIndex(index,val); 91 * obj->deleteAtIndex(index); 92 */