设计链表类,基础的链表操作,设置一个虚拟头节点后代码会很简单!
代码如下:
class MyLinkedList { public: struct ListNode { int val; ListNode *next; ListNode() : val(0), next(nullptr) {} ListNode(int x) : val(x), next(nullptr) {} ListNode(int x, ListNode *next) : val(x), next(next) {} }; MyLinkedList() { vhead=new ListNode(); len=0; } int get(int index) { if(index>=len||index<0) return -1; ListNode* t=vhead; for(int i=0;i<index;i++){ t=t->next; } return t->next->val; } void addAtHead(int val) { ListNode* head=new ListNode(val); head->next =vhead->next ; vhead->next =head; len++; return ; } void addAtTail(int val) { ListNode* tail=new ListNode(val); ListNode* t=vhead; for(int loca=0;loca<len;loca++){ t=t->next; } t->next=tail; len++; return ; } void addAtIndex(int index, int val) { if(index>len||len<0) return ; ListNode* node=new ListNode(val); ListNode* t=vhead; for(int i=0;i<index;i++){ t=t->next; } node->next=t->next ; t->next=node; len++; return ; } void deleteAtIndex(int index) { if(index>=len||len<0) return ; ListNode* t=vhead; for(int i=0;i<index;i++){ t=t->next; } ListNode* p=t->next; t->next=p->next ; delete p; len--; return ; } int len; ListNode* vhead; };