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

卦神岭做网站网页制作教程

卦神岭做网站,网页制作教程,优酷wordpress建站教程,淘宝网站的推广方案目录 题目要求 手搓两个相交简易链表 代码实现 题目要求 两个单链表的头节点 headA 和 headB ,请找出并返回两个单链表相交的起始节点,如果两个链表不存在相交节点,则返回 NULL 手搓两个相交简易链表 代码演示: struct Lis…

目录

题目要求

手搓两个相交简易链表

代码实现 


题目要求

两个单链表的头节点 headA 和 headB ,请找出并返回两个单链表相交的起始节点,如果两个链表不存在相交节点,则返回 NULL


手搓两个相交简易链表

代码演示:

struct ListNode* a1 = (struct ListNode*)malloc(sizeof(struct ListNode));
assert(a1);
struct ListNode* a2 = (struct ListNode*)malloc(sizeof(struct ListNode));
assert(a2);a1->val = 1;
a2->val = 2;a1->next = a2;struct ListNode* b1 = (struct ListNode*)malloc(sizeof(struct ListNode));
assert(b1);
struct ListNode* b2 = (struct ListNode*)malloc(sizeof(struct ListNode));
assert(b2);
struct ListNode* b3 = (struct ListNode*)malloc(sizeof(struct ListNode));
assert(b3);b1->val = 1;
b2->val = 2;
b3->val = 3;b1->next = b2;
b2->next = b3;struct ListNode* c1 = (struct ListNode*)malloc(sizeof(struct ListNode));
assert(c1);
struct ListNode* c2 = (struct ListNode*)malloc(sizeof(struct ListNode));
assert(c2);
struct ListNode* c3 = (struct ListNode*)malloc(sizeof(struct ListNode));
assert(c3);c1->val = 1;
c2->val = 2;
c3->val = 3;a2->next = c1;
b3->next = c1;
c1->next = c2;
c2->next = c3;
c3->next = NULL;

代码实现

代码演示:

struct ListNode* getIntersectionNode(struct ListNode* headA, struct ListNode* headB)
{// 先找各自链表的尾节点,判断是否相交struct ListNode* tailA = headA;struct ListNode* tailB = headB;int lenA = 1;int lenB = 1;while (tailA->next != NULL){tailA = tailA->next;lenA++;}while (tailB->next != NULL){tailB = tailB->next;lenB++;}if (tailA != tailB)return NULL;// 找相交节点int gap = abs(lenA - lenB);struct ListNode* longList = headA;struct ListNode* shortList = headB;if (lenA < lenB){longList = headB;shortList = headA;}while (gap--){longList = longList->next;}while (longList != shortList){longList = longList->next;shortList = shortList->next;}return longList;
}

代码解析:

代码思路:先判断两个链表是否相交,那么就是看尾节点是否相同,不相同就说明不相交,返回NULL 即可,尾节点相同则表示相交,再将节点长的链表走差距步,然后再同时往后走,找到相同的节点时,就是相交的节点

代码逻辑:两个链表各自往后走,并记录各自节点的个数,先判断尾节点的地址是否相同(注意:不是判断两个节点的数据是否相同),不想同就返回 NULL ,相同就利用 abs 函数求出 lenA 减去 lenB 的绝对值,就是两个链表相差的节点个数,再求出长的链表,先走差距步,再一起往后走,走到地址相同的节点时,就时交点

代码验证:

算法的时间和空间复杂度:

3 个 while 循环执行了 N 次,也就是 3*N(除去 3) ,且没有产生额外的空间

时间复杂度: O(N)

空间复杂度:O(1)

http://www.yayakq.cn/news/392113/

相关文章:

  • 新乡网站建设哪家公司好搭建购物商城
  • 南宁市网站厦门专业网站设计公
  • 闵行建设机械网站网站的音乐链接怎么做
  • 淘客手机版网站怎么做微信企业微网站
  • 策划书网站项目目标需求分析对京东网站建设的总结
  • 网站建设的目的和意义如何做好营销型网站用户体验
  • 自用电脑做网站天津网站制作网页
  • 做外贸网站方案网站建设设计简介
  • 无法跳转到建设银行网站运城注册公司
  • 中建材建设有限公司网站合作网站建设
  • 广西桂平建设局网站德城区城乡建设局网站
  • 怎样建立网站有哪些流程vm虚拟机搭建wordpress
  • 赣州建站服务wordpress菜单显示在哪里设置
  • 网站ps多大尺寸沈阳市建设公司网站
  • 四川网站建设yijia028发帖那个网站好 做装修的
  • 网站的建设包括无锡做网站公司哪家比较好
  • 一百互联网站建设百度seo优化公司
  • 佛山教育平台网站建设一级a做爰片免费网站 新闻
  • 南昌有哪些企业网站北京专业建设
  • 网站搭建工作怎么样网易企业邮箱可以保存多少邮件
  • 网站栏目推介怎么做主题在wordpress
  • 阳江做网站公司潍坊知名网站建设怎么收费
  • 网站链接怎么做跳转郑州网站设计的公司
  • 网站建设伍金手指下拉3贴吧网站开发需求分析
  • 南安建设局网站wordpress seo插件哪个好
  • 汉中站网站建设 软件有哪些
  • 介绍小说的网站模板下载地址设计网站公司收费
  • 网站建设证书网上国网推广多少钱一个户
  • 黑色网站欣赏邢台最新通知今天
  • jsp做的网站可以用的泊头市网站建设公司