一. 链表基础
这一块我一定得背下来。昨天春招面试我竟然忘了这一块怎么写的了。。。。真的尴尬,让我直接后面的题也忘了。很简单的一道题!!
struct ListNode{
int val;
ListNode *next;
ListNode(int x):val(x),next(NULL){}
};
C++中链表的插入元素和删除元素都是直接通过指针来做的。所以他的复杂度就是O(1),查询是O(N); 数组则刚好相反。
203.移除链表元素
这道题目最主要的就是虚拟头结点的设置。这也是我第一次知道关于虚拟头结点的使用。以后做题的时候多注意。
707.设计链表
主要就是各种链表的操作。记得操作的时候对链表的长度也要有所定义
class MyLinkedList { public: MyLinkedList() { ListNode *dummyNode(0); size = 0; } int get(int index) { if(index>=size || index<0){ return -1; } int mid_index = 0; ListNode *cur = dummyNode->next; for(mid_index=0;mid_index<size;mid_index++){ if(mid_index==index){ break; } cur = cur->next; } return cur->val; } void addAtHead(int val) { ListNode *head = new ListNode(val); head->next = dummyNode->next; dummyNode->next = head; size++; } void addAtTail(int val) { ListNode *newNode = new ListNode(val); ListNode *cur = dummyNode; while(cur->next!=NULL){ cur = cur->next; } cur->next = newNode; size++; } void addAtIndex(int index, int val) { if(index>size){ return; } if(index<0){ index = 0; } ListNode* newNode = new ListNode(val); ListNode* cur = dummyNode; while(index--) { cur = cur->next; } newNode->next = cur->next; cur->next = newNode; size++; } void deleteAtIndex(int index) { if(index<0 ||index >=size){ return; } ListNode* cur = dummyNode; while(index--) { cur = cur ->next; } ListNode* tmp = cur->next; cur->next = cur->next->next; delete tmp; size--; } private: int size; ListNode *dummyNode; };