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

重庆网站seo建设哪家好天津百度推广公司地址

重庆网站seo建设哪家好,天津百度推广公司地址,郑州餐饮加盟网站建设,重庆周边游景点推荐前言🌈前段时间我们学习了单向链表和双向链表,本期将带来3道与链表相关的OJ题来巩固对链表的理解。话不多说,让我们进入今天的题目吧!🚀本期的题目有:反转单链表、链表的中间结点、合并两个有序链表反转单链…
  1. 前言🌈

前段时间我们学习了单向链表和双向链表,本期将带来3道与链表相关的OJ题来巩固对链表的理解。话不多说,让我们进入今天的题目吧!

🚀本期的题目有:反转单链表链表的中间结点合并两个有序链表
  1. 反转单链表✨

a.题目

b.题解分析(迭代)

🍡三指针法:我们可以直接在原链表的基础上修改指针的指向,定义三个指针对链表每个结点的指针进行反转,循环直到链表结束。具体过程动图如下:

🔝头插法:在我们对链表进行进行头插时,假设依次插入1,2,3三个结点,最后结点的就是3,2,1,刚好相反。我们可以利用这个特性对链表进行反转,创建一个头指针指向一个空链表,然后遍历原链表的结点,将结点以头插的形式头插到新的链表中,最终新链表即为我们所需的反转链表(由于在头插过程中会改变结点的指向,所以我们也需要保存原链表的下一结点)。具体过程动图如下:

c.AC代码(迭代)

struct ListNode 
{int val;struct ListNode *next;
};//三指针法
struct ListNode* reverseList(struct ListNode* head)
{struct ListNode* n1 = NULL;struct ListNode* n2 = head;while (n2){struct ListNode* n3 = n2->next; //保存下一结点位置n2->next = n1;n1 = n2;n2 = n3;}//n2为空时,n1即为反转后表头return n1;
}//头插法
struct ListNode* reverseList(struct ListNode* head)
{struct ListNode* newhead = NULL; //新链表struct ListNode* first = head;while (first){struct ListNode* next = first->next; //保存下一结点//进行头插first->next = newhead;newhead = first;first = next;}//全部结点头插完毕return newhead;}

d.题解分析(递归)

除了用上面迭代的方式,我们还可以用递归的方式来实现反转链表,这会让代码更加简洁。我们可以先使用递归函数找到链表尾记为ret,ret即为反转后链表的头结点。当找到头结点后,递归函数开始返回,每次将当前结点的下一结点的next指针指向当前结点。由于递归返回是逆向的,因此当递归函数全部出栈后,链表的反转也就完成了。具体过程动图如下:

e.AC代码(递归)

struct ListNode 
{int val;struct ListNode *next;
};
//递归法
struct ListNode* reverseList(struct ListNode* head) 
{if (head == NULL || head->next == NULL) //当只有一个结点、没有结点、递归到最后一个结点时返回return head;struct ListNode* cur = reverseList(head->next); //找到链表尾结点head->next->next = head; //让下一结点指向当前结点head->next = NULL; //当前结点指向空return cur; //返回反转后头结点
}
  1. 链表的中间结点📏

a.题目

b.题解分析

本题我们可以使用快慢指针的方法来解答。

快慢指针:含快指针慢指针两个指针。快慢指针中的快慢指的是移动的步长,即每次向前移动速度的快慢。例如可以让快指针每次沿链表向前移动2次,慢指针每次向前移动1次。

由于我们要求找到链表的中间结点,所以我们先定义一个快指针fast和一个慢指针slow指向第一个结点,然后让指针开始移动。规定快指针每次移动两步,慢指针每次移动一步,当快指针走到“链表尾”后,由于慢指针移动的步长为快指针一半,最后慢指针指向的即为链表的中间结点。

🔞本题有个需要注意的地方是:当链表的结点数为奇数时,链表只有一个中间结点,当快指针走到尾结点时慢指针即指向中间结点;但当链表的结点数为偶数时,快指针不可能走到尾结点,并且链表有两个中间结点,由于题目要求我们返回第二个结点,对应快指针指向空。综上,快指针fast移动停止的条件是fast == NULL || fast -> next == NULL。具体动图过程如下:

c.AC代码

struct ListNode* middleNode(struct ListNode* head)
{struct ListNode* slow = head;struct ListNode* fast = head;while (fast != NULL && fast->next != NULL) //循环继续条件,对应于上述结束条件{fast = fast->next->next;slow = slow->next;}return slow;
}
  1. 合并两个有序链表🍀

a.题目

b.题解分析

这道题和合并两个有序数组有异曲同工之妙,只不过我们要合并的是链表,而不是数组。我们可以从左到右遍历两个链表比较结点的大小,将小的结点尾插到新链表。注意不是创建一个新结点然后尾插,题目要求新链表是通过已有结点拼接而成的。当一个链表遍历完毕后将另外一个链表的剩余结点尾插到新链表后即可完成合并。

我们在前面学习链表尾插时,不难发现,如果链表没有带哨兵位的头结点,尾插时需要额外考虑链表为空的情况,而我们正是需要从空链表开始尾插,所以为了代码简洁,我们可以创建带哨兵位的头结点来指向链表的有效部分,这样可以不需要进行分类讨论。具体过程动图如下:

c.AC代码

struct ListNode 
{int val;struct ListNode *next;};
struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2)
{struct ListNode* head = malloc(sizeof(struct ListNode)); //创建头结点head->next = NULL;struct ListNode* tail = head; //tail代表尾结点struct ListNode* p1 = list1;struct ListNode* p2 = list2;//遍历比较,尾插while (p1 != NULL && p2 != NULL){if (p1->val > p2->val){//把list2尾插到tail结点后tail->next = p2;tail = tail->next;p2 = p2->next;}else{//把list1尾插到tail结点后tail->next = p1;tail = tail->next;p1 = p1->next;}}//有一个链表遍历完毕if (p1){//将p1及以后结点尾插tail->next = p1;}else if (p2){//将p2及以后结点尾插tail->next = p2;}struct ListNode* cur = head->next; //头结点指向的部分即为我们所需的结果free(head); //释放创建的头结点return cur;
}


以上,就是本期的全部内容啦🌸

制作不易,能否点个赞再走呢🙏

http://www.dt0577.cn/news/50143.html

相关文章:

  • 中建南方建设集团网站自己的网站怎么做seo
  • 沈阳网站建站公司浏览器下载
  • 顺德公司做网站百度文库账号登录入口
  • 百度联盟 网站备案营销的手段和方法
  • 湖南做网站价格临沂seo整站优化厂家
  • 闸北区网站制作怎么做好seo推广
  • 自己做网站需要会什么东莞seo公司
  • asp.net网站开发pdf自媒体发布软件app
  • 网站正在建设中的网页怎么做学it什么培训机构好
  • 房地产 东莞网站建设成都网站优化排名推广
  • 怎么修改网站网页的背景图片网络媒体有哪些
  • 企业网站维护工作内容aso优化重要吗
  • wordpress百度云下载文件aso优化技巧大aso技巧
  • 桥下网站制作哪家好凡科建站收费价目表
  • 广告投放形式有哪些武汉外包seo公司
  • 网站的建设需要多少外链工具下载
  • 门户网站区别优化设计四年级上册语文答案
  • 网站title 在哪里设置优化系统软件
  • 怎么做简单网站首页百度网站入口链接
  • 网站建设设计技术方案模板搜索引擎优化排名工具
  • 建设银行网站重置密码注册教育培训机构需要什么条件
  • 历下网站建设荆门网站seo
  • 如何做好网站的优化的监测评价企业培训体系
  • js实现网站简体转繁体网站关键词怎么优化到首页
  • 网站制作公司价格商丘网站优化公司
  • 做电子杂志用什么网站百度官方客服电话
  • wordpress适应式网站博客模板seo综合优化公司
  • 展厅展览设计seo关键词排名工具
  • java除了做网站最知名的网站推广公司
  • 深圳福田口岸seo机构