每日博客Day 7
每日算法
707.设计链表
题意:
在链表类中实现这些功能:
- get(index):获取链表中第 index 个节点的值。如果索引无效,则返回-1。
- addAtHead(val):在链表的第一个元素之前添加一个值为 val 的节点。插入后,新节点将成为链表的第一个节点。
- addAtTail(val):将值为 val 的节点追加到链表的最后一个元素。
- addAtIndex(index,val):在链表中的第 index 个节点之前添加值为 val 的节点。如果 index 等于链表的长度,则该节点将附加到链表的末尾。如果 index 大于链表长度,则不会插入节点。如果index小于0,则在头部插入节点。
- deleteAtIndex(index):如果索引 index 有效,则删除链表中的第 index 个节点。
自己定义了一个链表,然后自己去看案例去调试项目的代码,一步一步的检查让代码通过,感觉还是有一点成就感的,就是代码的调试效率有点低下,这一个算法题目涉及到了五种链表的功能,如果自己一个人一口气全部写下来我感觉还是挺厉害的了。
class MyLinkedList {
public://在类中顶一个结构体,我们使用虚拟头结点的方式struct LinkedList{LinkedList(int val){this->val = val;next = NULL;}int val;LinkedList* next;};//链表的初始化,我们采用虚拟头结点的方式MyLinkedList() {m_size = 0;dummyHead = new LinkedList(0);}//get没问题的
int get(int index) {if (index > (m_size - 1) || index < 0) {return -1;}LinkedList* cur = dummyHead->next;while(index-- && cur->next != nullptr){ // 如果--index 就会陷入死循环cur = cur->next;}return cur->val;}//没问题的void addAtHead(int val) {LinkedList* NewHead = new LinkedList(val);NewHead->next = dummyHead->next;dummyHead -> next= NewHead;m_size++;}void addAtTail(int val) {LinkedList* NewTail = new LinkedList(val);LinkedList* cur = dummyHead;while (cur->next != nullptr){cur = cur->next;}cur->next = NewTail;m_size++;}void addAtIndex(int index, int val) {if (index > (m_size) || index < 0) {return;}if(index <= 0) index = 0;LinkedList* NewIndex = new LinkedList(val);LinkedList* cur = dummyHead;while (index--){cur = cur->next;}//现在的cur指向的是要插入节点的前一个节点位置NewIndex->next = cur->next;cur->next = NewIndex;m_size++;}//没问题的void deleteAtIndex(int index) {if (index > (m_size - 1) || index < 0) {return;}LinkedList* cur = dummyHead;while (index--){cur = cur->next;}LinkedList* temp = cur->next;cur->next = cur->next->next;temp = nullptr;m_size--;}private:int m_size;LinkedList* dummyHead;
};
项目进度
双端网络模块的开发和准备:
明白这段代码的逻辑是怎么样的
else{CServSocket* pserver = CServSocket::GetInstance();int count = 0;if (pserver->InitSocket() == false){MessageBox(NULL, _T("网络初始化异常!"), _T("网络初始化失败"), MB_OK | MB_ICONERROR);exit(0);}while (CServSocket::GetInstance() != NULL){if (pserver->AcceptClient() == false){if (count > 3){MessageBox(NULL, _T("多次无法正常接入用户!"), _T("接入用户失败"), MB_OK | MB_ICONERROR);exit(0); }MessageBox(NULL, _T("无法正常接入用户!"), _T("接入用户失败"), MB_OK | MB_ICONERROR);count++;}int ret = pserver->DealCommand();if (ret > 0){ret = ExcuteCommand(ret);if (ret != 0){//表明在执行函数失败TRACE("执行命令失败:%d ret = %d\r\n", pserver->GetPacket().sCmd, ret);}pserver->CloserClient();}}}
网络模块的调试和完善:在调试项目的时候客户端一直卡死,不知道是什么问题,后面调试的时候问题就是说,size的边界是有问题的,后面返回的ACK是-1的原因也是因为数据cmd两边对应不上
面试内容
无
设计模式
设计模式的一些了解
设计模式的原则
依赖倒置原则(DIP)
迪米特法则(LOD)
日总结
- 看了《白日梦想家》电影,感觉自己很喜欢这种摄影风格。风光摄影的画面给人带来的感觉非常的震撼,给人的内心带来一种安静的感觉。
- 昨天晚上是十二点休息的,但是还是早上十一点才起来,这三天都不是很在状态,早上起不来
- 下午的项目效率不是很高,一个下午的时候才看了两节课的内容,项目写起来感觉挺痛苦的