203加一個頭節點統一進行操作,很方便,最後提交的時候去掉頭節點就好。
1 class Solution { 2 public: 3 ListNode* removeElements(ListNode* head, int val) { 4 //為了操作統一 還是整一個頭出來比較合適 5 //依舊是多一個頭 好操作 6 ListNode* h = new ListNode(0); 7 h->next = head; 8 ListNode* h1 = h; 9 while(h->next != NULL) 10 { 11 if(h->next->val == val) 12 { 13 h->next = h->next->next; 14 } 15 else{ 16 h = h->next; 17 } 18 } 19 return h1->next; 20 } 21 };
707就是考察連結串列的基礎操作
1 class MyLinkedList 2 { 3 public: 4 5 MyLinkedList()//初始化鏈物件 6 { 7 ListNode* head1 = new ListNode(4396); 8 head1->next = NULL; 9 len = 0;//帶頭結點 所有第一個不算入長度 10 //這個值我帶不回來 11 head = head1; 12 } 13 14 void Print() {//列印整個連結串列 15 t = head; 16 while (t) { 17 cout << t->val << " "; 18 t = t->next; 19 } 20 cout << endl; 21 } 22 23 int get(int index)//獲取連結串列中下標為index的節點值 24 { 25 if (index >= len || index < 0) 26 { 27 return -1; 28 } 29 t = head; 30 while (index-- >= 0) { 31 t = t->next; 32 } 33 return t->val; 34 } 35 36 void addAtHead(int val)//頭插入 37 { 38 t = new ListNode(val); 39 t->next = head->next; 40 head->next = t; 41 len++; 42 } 43 44 void addAtTail(int val)//尾插入 45 { 46 t = head; 47 while (t->next) 48 { 49 t = t->next; 50 } 51 t->next = new ListNode(val); 52 len++; 53 } 54 55 void addAtIndex(int index, int val) 56 { 57 if (index > len) 58 { 59 return; 60 } 61 t = head; 62 while (index-- > 0) 63 { 64 t = t->next; 65 } 66 ListNode* temp = new ListNode(val); 67 temp->next = t->next; 68 t->next = temp; 69 len++; 70 } 71 72 void deleteAtIndex(int index) 73 { 74 if (index < 0 || index >= len) 75 { 76 return; 77 } 78 t = head; 79 while (index-- > 0) 80 { 81 t = t->next; 82 } 83 t->next = t->next->next; 84 len--; 85 } 86 87 private: 88 struct ListNode { 89 int val; 90 ListNode* next; 91 //結構體內可以塞建構函式 而且引數列表不同 可以過載 92 ListNode(int x) 93 { 94 val = x; 95 next = NULL; 96 } 97 //或者寫簡略形式 98 //ListNode(int x):val(x),next(NULL){} 99 }; 100 ListNode* head;//頭節點 101 ListNode* t;//用於類中函式使用 102 int len;//連結串列長度 103 };
206題把原來的連結串列當輸入材料,重新輸入一遍即可。
1 class Solution { 2 public: 3 //將原連結串列當作資料來源 重新以頭插法做表 4 ListNode* reverseList(ListNode* head) { 5 ListNode* ans = new ListNode(0); 6 ListNode* h = head; 7 while(h){ 8 h = h->next; 9 head->next = ans->next; 10 ans->next = head; 11 head = h; 12 } 13 return ans->next; 14 } 15 };