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

济南网站建设0531soso单页应用seo如何解决

济南网站建设0531soso,单页应用seo如何解决,免费学做美食视频网站有哪些,网上做批发有哪些网站有哪些手续链表经典OJ题 移除链表元素链表的中间节点反转链表合并两个有序链表分割链表 移除链表元素 给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val val 的节点,并返回 新的头节点 。 示例 1: 输入:head […

链表经典OJ题

  • 移除链表元素
  • 链表的中间节点
  • 反转链表
  • 合并两个有序链表
  • 分割链表

移除链表元素

给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点

示例 1:

输入:head = [1,2,6,3,4,5,6], val = 6 输出:[1,2,3,4,5]

示例 2:

输入:head = [], val = 1 输出:[]

示例 3:

输入:head = [7,7,7,7], val = 7 输出:[]

提示:

列表中的节点数目在范围 [0, 104] 内
1 <= Node.val <= 50
0 <= val <= 50

题目链接:link

本题不同于基本操作中的头删尾删等,因为头结点也有可能是要删掉的,那这个时候就比较麻烦了,所以我们最好是重新定义一个链表,遍历原链表不为val的节点,尾插在新链表中

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     struct ListNode *next;* };*/
struct ListNode* create(int x)
{struct ListNode* new=(struct ListNode*)malloc(sizeof(struct ListNode));new->val=x;new->next=NULL;return new;
}
void PushBack(struct ListNode** pp,int x,struct ListNode** ppt)
{struct ListNode* new=create(x);if(*pp==NULL){*pp=new;*ppt=new;return;}(*ppt)->next=new;(*ppt)=(*ppt)->next;
}struct ListNode* removeElements(struct ListNode* head, int val) {struct ListNode* newhead=NULL;struct ListNode* tail=NULL;struct ListNode* cur=head;while(cur!=NULL){if(cur->val!=val)PushBack(&newhead,cur->val,&tail);cur=cur->next;}return newhead;
}

另外官方题解用了递归迭代的方式也很值得学习:

迭代:

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     struct ListNode *next;* };*/
struct ListNode* removeElements(struct ListNode* head, int val) {struct ListNode* dummyHead=(struct ListNode*)malloc(sizeof(struct ListNode));dummyHead->next=head;struct ListNode* cur=dummyHead;while(cur->next!=NULL){if(cur->next->val==val)cur->next=cur->next->next;elsecur=cur->next;}return dummyHead->next;
}

递归的话,反正我是理解的不太好(每次都得画好久递归图才能理解呜呜呜)

struct ListNode* removeElements(struct ListNode* head, int val) {if (head == NULL) {return head;}head->next = removeElements(head->next, val);return head->val == val ? head->next : head;
}

链表的中间节点

给你单链表的头结点 head ,请你找出并返回链表的中间结点。

如果有两个中间结点,则返回第二个中间结点。

示例 1:
在这里插入图片描述

输入:head = [1,2,3,4,5] 输出:[3,4,5] 解释:链表只有一个中间结点,值为 3 。

示例 2:
在这里插入图片描述

输入:head = [1,2,3,4,5,6] 输出:[4,5,6] 解释:该链表有两个中间结点,值分别为 3 和 4 ,返回第二个结点。

题目链接:link
这道题的思路是:设置两个指针,一个slow指针,一个fast指针,slow指针一次走一步,fast指针一次走两步,当fastfast的next为空的时候,slow就是我们要找的中间节点。

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     struct ListNode *next;* };*/
typedef struct ListNode LN;
struct ListNode* middleNode(struct ListNode* head) {LN* slow=head;LN* fast=head;while(fast&&fast->next){slow=slow->next;fast=fast->next->next;}return slow;
}

反转链表

给你单链表的头节点 head ,请你反转链表,并返回反转后的链表

示例 1:
在这里插入图片描述

输入:head = [1,2,3,4,5] 输出:[5,4,3,2,1]

示例 2:
在这里插入图片描述

输入:head = [1,2] 输出:[2,1]

示例 3:

输入:head = [] 输出:[]

题目链接:link

这道题的思路非常精巧。
设立三个指针,n1,n2和n3,分别指向NULL,头结点和头结点的next。
n2不为空的时候,将n2的next指向n1,然后将n3赋值给n2(这也是n3存在的意义,因为改变n2的next指针以后,n2就无法通过n2=n2->next语句访问到原链表的下一个指针了)n3=n3->next,n1=n2;

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     struct ListNode *next;* };*/typedef struct ListNode LN;
struct ListNode* reverseList(struct ListNode* head) {if(head==NULL)return NULL;if(head->next==NULL)return head;LN* n1=NULL;LN* n2=head;LN* n3=head->next;while(n2){n2->next=n1;n1=n2;n2=n3;if(n3!=NULL)n3=n3->next;}return n1;
}

当然n3也可以不用一开始就定义,也可以在循环中当做一个临时变量:

struct ListNode* reverseList(struct ListNode* head) {struct ListNode* prev = NULL;struct ListNode* curr = head;while (curr) {struct ListNode* next = curr->next;//在这里设置n3,就不用单独考虑head是否为空或者只有一个节点的情况了curr->next = prev;prev = curr;curr = next;}return prev;
}

合并两个有序链表

将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。

示例 1:
在这里插入图片描述
输入:l1 = [1,2,4], l2 = [1,3,4] 输出:[1,1,2,3,4,4]

示例 2:

输入:l1 = [], l2 = [] 输出:[]

示例 3:

输入:l1 = [], l2 = [0] 输出:[0]

题目链接:link
设置四个指针,l1遍历链表1,l2遍历链表2,newhead是新链表头结点(哨兵位),newtail是新链表尾指针,l1和l2比较,谁小谁尾插到newtail后,然后向后走一位,没有尾插的不动,直到l1或l2有一方为空,再把没有遍历完的那个链表的剩余部分直接尾插到newtail后面。

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     struct ListNode *next;* };*/
typedef struct ListNode LN;
struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2) {LN* l1=list1;LN* l2=list2;LN* newhead=(LN*)malloc(sizeof(LN));LN* tail=newhead;if(l1==NULL&&l2==NULL)return NULL;while(l1&&l2){if(l1->val<=l2->val){tail->next=l1;l1=l1->next;}else{tail->next=l2;l2=l2->next;}tail=tail->next;}if(l1==NULL){tail->next=l2;}else{tail->next=l1;}return newhead->next;
}

分割链表

给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。

你不需要 保留 每个分区中各节点的初始相对位置。

示例 1:
在这里插入图片描述
输入:head = [1,4,3,2,5,2], x = 3 输出:[1,2,2,4,3,5]

示例 2:

输入:head = [2,1], x = 2 输出:[1,2]

题目链接:link

大小链表法,新设两个链表一个放小的,一个放大的,然后最后把他们拼起来。

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     struct ListNode *next;* };*/typedef struct ListNode LN;
struct ListNode* partition(struct ListNode* head, int x){LN* s=(LN*)malloc(sizeof(LN));LN* b=(LN*)malloc(sizeof(LN));LN* st=s;LN* bt=b;LN* cur=head;while(cur){if(cur->val<x){st->next=cur;st=st->next;}else{bt->next=cur;bt=bt->next;}cur=cur->next;}bt->next=NULL;st->next=b->next;}

这个题要注意的是,最后在处理bt->next,也就是大链表的最后时一定要记得“封尾”,也就是要给他赋值为NULL,因为我们在把原链表中的节点挪到新的大小链表中的时候,连同他的next指针一起挪动了,那也就是说,如果不“封尾”,那么大链表的最后一个元素后还连着他在原链表中的后继元素。

好了今天的分享就结束了,马上又要期末考试啦!期中数据结构得了满分,希望期末可以继续保持下去!!!下学期就是真正的软工人啦~

http://www.dtcms.com/wzjs/26757.html

相关文章:

  • 网站维护与建设实训心得打开网址跳转到国外网站
  • 成品网站货源今日新闻7月1日
  • 可以做免费广告的网站新手怎么引流推广推广引流
  • 网站用ps下拉效果怎么做的杭州网站排名seo
  • 数据库做图书管理系统网站推广普通话手抄报模板
  • 免费咨询抑郁症新区快速seo排名
  • 如何去掉Wordpress访问网站淘宝的17种免费推广方法
  • 南海网站建设软文发布平台有哪些
  • 做网站带微好吗app软件下载站seo教程
  • 网站设计原则近期国内外重大新闻10条
  • 深圳网站设计九曲江苏seo排名
  • 旅游电子商务网站建设费用电工培训课程
  • 网站建设方案 前台 后台seo平台优化服务
  • 西部数码做的网站打不开中国十大新闻网站排名
  • 上海弄网站的武汉seo公司
  • 长沙 外贸网站建设公司排名市场推广方案ppt
  • 在网上找做设计是什么网站免费网络营销软件
  • 网上去哪里找做网站的品牌营销案例
  • 免费自助建站网站一览自助建站平台谷歌浏览器官网
  • b2b网站建设推荐seo哪家强
  • 做flash网站框架引擎东莞整站优化排名
  • 毕业设计做音乐网站可以吗百度云网盘免费资源
  • 多用户商城系统网站建设小企业广告投放平台
  • 网站设计与建设的公司百度首页排名优化公司
  • 选择好的佛山网站建设域名停靠
  • 大创项目做英语网站网站建设哪家好
  • 有专门做消除网站上对公司不利的网络营销的种类
  • 河北建设厅网站刷身份证友情链接检测的特点
  • wordpress 主题 修改seo的优点和缺点
  • 我自己做的一个网站显示证书错误百度关键词排名批量查询工具