1. 程式人生 > 其它 >abby:python 阿里口碑商家流量分析

abby:python 阿里口碑商家流量分析

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