3 第二章 链表

文章介绍了链表的基础知识,包括C++中链表的插入和删除操作,强调了虚拟头结点在移除链表元素问题中的作用。此外,讨论了设计链表类的实现,如添加元素和删除元素的方法。还提到了双指针技巧在反转链表问题中的应用。
摘要由CSDN通过智能技术生成

一. 链表基础

 

这一块我一定得背下来。昨天春招面试我竟然忘了这一块怎么写的了。。。。真的尴尬,让我直接后面的题也忘了。很简单的一道题!!

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; };

206.反转链表

这道题目就是双指针的经典用法。注意最后返回的是pre即可 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值