当前位置: 首页 > news >正文

做网站 用什么建站软件好用什么做网站

做网站 用什么建站软件好,用什么做网站,福州专业网站建设公司,wordpress 优惠券 插件今日学习目标 一、基础 链表 接下来说一说链表的定义。 链表节点的定义,很多同学在面试的时候都写不好。 这是因为平时在刷leetcode的时候,链表的节点都默认定义好了,直接用就行了,所以同学们都没有注意到链表的节点是如何定…

今日学习目标

一、基础

  • 链表

接下来说一说链表的定义。

链表节点的定义,很多同学在面试的时候都写不好。

这是因为平时在刷leetcode的时候,链表的节点都默认定义好了,直接用就行了,所以同学们都没有注意到链表的节点是如何定义的。

而在面试的时候,一旦要自己手写链表,就写的错漏百出。

这里我给出C/C++的定义链表节点方式,如下所示:

// 单链表
struct ListNode {int val;  // 节点上存储的元素ListNode *next;  // 指向下一个节点的指针ListNode(int x) : val(x), next(NULL) {}  // 节点的构造函数
};

 有同学说了,我不定义构造函数行不行,答案是可以的,C++默认生成一个构造函数。

但是这个构造函数不会初始化任何成员变量,下面我来举两个例子:  

通过自己定义构造函数初始化节点:

ListNode* head = new ListNode(5);

 使用默认构造函数初始化节点:

ListNode* head = new ListNode();
head->val = 5;

所以如果不定义构造函数使用默认构造函数的话,在初始化的时候就不能直接给变量赋值!

二、算法

 1. 203. 移除链表元素

/*** Definition for singly-linked list.* 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) {}* };*/
class Solution {
public:ListNode* removeElements(ListNode* head, int val) {while (head != NULL && head->val == val) {ListNode* p = head;head = head->next;delete p;}ListNode* cur = head;while (cur != NULL && cur->next != NULL) {if (cur->next->val == val) {ListNode* p = cur->next;cur->next = cur->next->next;delete p;} else {cur = cur->next;}}return head;}
};

2. 707.设计链表

#include <bits/stdc++.h>
using namespace std;class MyLinkedList {
public:// 定义链表节点结构体struct LinkedNode {int val;LinkedNode* next;LinkedNode(int val):val(val), next(nullptr){}};// 初始化链表MyLinkedList() {_dummyHead = new LinkedNode(0); // 这里定义的头结点 是一个虚拟头结点,而不是真正的链表头结点_size = 0;}// 获取到第index个节点数值,如果index是非法数值直接返回-1, 注意index是从0开始的,第0个节点就是头结点int get(int index) {if (index > (_size - 1) || index < 0) {return -1;}LinkedNode* cur = _dummyHead->next;while(index--){ // 如果--index 就会陷入死循环cur = cur->next;}return cur->val;}// 在链表最前面插入一个节点,插入完成后,新插入的节点为链表的新的头结点void addAtHead(int val) {LinkedNode* newNode = new LinkedNode(val);newNode->next = _dummyHead->next;_dummyHead->next = newNode;_size++;}// 在链表最后面添加一个节点void addAtTail(int val) {LinkedNode* newNode = new LinkedNode(val);LinkedNode* cur = _dummyHead;while(cur->next != nullptr){cur = cur->next;}cur->next = newNode;_size++;}// 在第index个节点之前插入一个新节点,例如index为0,那么新插入的节点为链表的新头节点。// 如果index 等于链表的长度,则说明是新插入的节点为链表的尾结点// 如果index大于链表的长度,则返回空// 如果index小于0,则在头部插入节点void addAtIndex(int index, int val) {if(index > _size) return;if(index < 0) index = 0;LinkedNode* newNode = new LinkedNode(val);LinkedNode* cur = _dummyHead;while(index--) {cur = cur->next;}newNode->next = cur->next;cur->next = newNode;_size++;}// 删除第index个节点,如果index 大于等于链表的长度,直接return,注意index是从0开始的void deleteAtIndex(int index) {if (index >= _size || index < 0) {return;}LinkedNode* cur = _dummyHead;while(index--) {cur = cur ->next;}LinkedNode* tmp = cur->next;cur->next = cur->next->next;delete tmp;//delete命令指示释放了tmp指针原本所指的那部分内存,//被delete后的指针tmp的值(地址)并非就是NULL,而是随机值。也就是被delete后,//如果不再加上一句tmp=nullptr,tmp会成为乱指的野指针//如果之后的程序不小心使用了tmp,会指向难以预想的内存空间tmp=nullptr;_size--;}// 打印链表void printLinkedList() {LinkedNode* cur = _dummyHead;while (cur->next != nullptr) {cout << cur->next->val << " ";cur = cur->next;}cout << endl;}
private:int _size;LinkedNode* _dummyHead;};

3. 206.反转链表

class Solution {
public:ListNode* reverseList(ListNode* head) {if (head == NULL)return head;ListNode* dummyHead = new ListNode(0); // 设置一个虚拟头结点dummyHead->next = head; // 将虚拟头结点指向head,这样方便后面做删除操作ListNode* p = dummyHead->next;ListNode* q;dummyHead->next = NULL;while (p != NULL) {q = p;p = p->next;q->next = dummyHead->next;dummyHead->next = q;}return dummyHead->next;}
};

4. 24. 两两交换链表中的节点

#include <iostream>
#include <bits/stdc++.h>
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) {}
};
int main(){return 0;
}
ListNode* swapPairs(ListNode* head) {if (head==NULL || head->next==NULL) {return head;}ListNode *dummyHead = new ListNode(0);dummyHead->next = head;ListNode *cur  = dummyHead;ListNode *p,*q;while (cur->next!=nullptr &&cur->next->next!=nullptr) {p = cur->next;q = cur->next->next->next;cur->next = p->next;cur->next->next = p;cur->next->next->next = q;cur = cur->next->next;}return dummyHead->next;
}

5. 19.删除链表的倒数第N个节点

#include <bits/stdc++.h>
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) {}
};
int main(){return 0;
}
ListNode* removeNthFromEnd(ListNode* head, int n) {if(head==NULL) return NULL;ListNode *dummyNode = new ListNode();dummyNode->next = head;ListNode *p,*q;p=q=dummyNode;while (n--&&p!=nullptr) {p=p->next;}p=p->next;while(p!=nullptr&&q!=nullptr){p=p->next;q=q->next;}ListNode *temp = q->next;q->next = q->next->next;delete temp;return dummyNode->next;
}

6. 面试题 02.07. 链表相交

#include <bits/stdc++.h>
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) {}
};
int main(){return 0;
}
ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {int aLen = 0;int bLen = 0;ListNode *pa = headA;ListNode *pb = headB;while(pa!=nullptr){aLen++;pa = pa->next;}while(pb!=nullptr){bLen++;pb = pb->next;}int k;pa = headA;pb = headB;if(aLen<=bLen){k = bLen - aLen;while (k-- && pb!=nullptr) {pb = pb->next;}while(pb!=nullptr){if(pa==pb){return pb;}pa = pa->next;pb = pb->next;}}else{k = aLen - bLen;while (k-- && pa!=nullptr) {pa = pa->next;}while(pa!=nullptr){if(pa==pb){return pa;}pa = pa->next;pb = pb->next;}}return NULL;
}
http://www.sczhlp.com/news/142415/

相关文章:

  • 关于Leetcode 812题的简单思考
  • 网站咋开通怎样免费申请永久域名
  • 保定网站建设价格企业微网站怎么建设
  • 个人博客网站需要备案吗大连模板网站制作推荐
  • 工信部网站备案投诉wordpress重写内置函数
  • 企业网站建设一般要素包括哪些网龙网络公司排名
  • Laravel5.8 利用 snappyPDF 生成PDF文件
  • 快速建设网站方案网站建设有哪三部
  • 宁波网站建设公司代理关于互联网的网站
  • 上蔡网站建设百度站长验证网站失败
  • 建设银行网站登陆不上wordpress伪静态页文件夹
  • 景德镇网站建设景德镇全网整合营销公司
  • 做包装看什么网站网站建设产品经理职责
  • 重庆住房城乡建设厅网站海曙网站设计建设
  • php做网站会遇到的问题长沙装修公司旧房翻新
  • 做直播网站找哪家网站南通网站制作建设
  • 学校网站设计及代码南京关键词seo公司
  • 沈阳网站建设设计自学做网站一般要多久
  • 25秋周总结4
  • 江阴网站建设工作室网站建设和编程的区别
  • 成都网站制作推来客网站系统郑州推出vip服务
  • 大型网站建设 教程wordpress电子商务
  • 定制网站和模板网站有何区别公司做网站注意什么
  • 免费的网站源码去哪下载wordpress原创
  • Python 潮流周刊#121:工程师如何做出高效决策?
  • 饥荒联机版
  • 色轮配色网站自己做视频网站如何接广告
  • 网站被降权重新做网站济南医院网站建设服务公司
  • 如何做动漫网站网站导航界面
  • 做网站素材图片最新wordpress免费主题