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

互助网站开发南通市做网站

互助网站开发,南通市做网站,租赁商城手机网站开发,263邮箱登录登录入口目录 1. 题目1:返回倒数第k个节点 1.1 题目链接及描述 1.2 解题思路 1.3 程序 2. 题目2:链表的回文结构 2.1 题目链接及描述 2.2 解题思路 2.3 程序 1. 题目1:返回倒数第k个节点 1.1 题目链接及描述 题目链接: 面试题 …

目录

1. 题目1:返回倒数第k个节点

1.1 题目链接及描述

1.2 解题思路

1.3 程序

2. 题目2:链表的回文结构

2.1 题目链接及描述

2.2 解题思路

2.3 程序


1. 题目1:返回倒数第k个节点

1.1 题目链接及描述

题目链接:

面试题 02.02. 返回倒数第 k 个节点 - 力扣(LeetCode)

题目描述:

实现一种算法,找出单向链表中倒数第 k 个节点。返回该节点的值。

(该题目已保证给定k保证有效)

1.2 解题思路

思路1:计数转换为正数

遍历单链表计数,假设计得链表结点数为n,倒数第k个元素即正数第n-k个元素,再遍历返回第n-k个结点的值即可;

时间复杂度O(N)(但遍历链表两遍),空间复杂度O(1);

思路2:存储到数组中再下标访问正数元素

新创建一个数组,遍历单链表,依次将链表的结点值记录到数组中,假设计得链表结点数为n,结点值分别记录到数组下标0~n-1的位置,返回下标为n-k的数组元素值即可;

时间复杂度O(N),空间复杂度O(N);

思路3:快慢指针(本题解法)

创建两个指针,一个指针指向链表第一个结点,称为慢指针;一个指针指向链表第k个结点,称为快指针;

令两个指针同时向后遍历,直至快指针指向空时,此时慢指针即指向倒数第k个结点;

时间复杂度O(N)(只遍历链表一遍),空间复杂度O(1);

1.3 程序

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     struct ListNode *next;* };*/
typedef struct ListNode ListNode;
int kthToLast(struct ListNode* head, int k) {ListNode* fast=head,*slow=head;// 令fast先走k步while(k--){fast=fast->next;}// 快慢同时走while(fast){slow=slow->next;fast=fast->next;}return slow->val;
}

2. 题目2:链表的回文结构

2.1 题目链接及描述

题目链接:链表的回文结构_牛客题霸_牛客网

题目描述:

对于一个链表,请设计一个时间复杂度为O(n),额外空间复杂度为O(1)的算法,判断其是否为回文结构。
给定一个链表的头指针A,请返回一个bool值,代表其是否为回文结构。保证链表长度小于等于900。

2.2 解题思路

思路1:

存储到数组,再创建两个计数变量分别从前向后和从后向前进行遍历来进行回文判断。

时间复杂度:O(N),空间复杂度:O(N)(不符合要求);

思路2:(本题解法)

第一步:定位链表的中间结点;

第二步:从中间结点开始,将链表的后半段逆置;

第三步:创建两个指针,一个指向链表第一个结点,一个指向链表的中间结点,两个同时向后走;

对于偶数个结点的链表,直至其中一个指针指向空即可对应匹配结束:

对于奇数个结点的链表,由于逆置的后半段链表并不影响原链表中间结点的的本来指向,未逆置的前半段链表的最后一个结点的指向其实还是指向原链表的结点,最终比较也是奇数个结点链表的中间结点的自我比较,匹配结束标志仍是任意一个指针指向空:

2.3 程序

/*
struct ListNode {int val;struct ListNode *next;ListNode(int x) : val(x), next(NULL) {}
};*/
using ListNode = struct ListNode;
class PalindromeList {public:// 查找中间结点struct ListNode* middleNode(struct ListNode* head) {ListNode* slow = head;ListNode* fast = head;while (fast != NULL && fast->next != NULL) {fast = fast->next->next;slow = slow->next;}return slow;}// 逆置链表struct ListNode* reverseList(struct ListNode* head) {// 判空if (head == NULL) {return head;}// 创建三个指针ListNode* n1 = NULL;ListNode* n2 = head;ListNode* n3 = n2->next;while (n2) {n2->next = n1;n1 = n2;n2 = n3;if (n3)n3 = n3->next;}return n1;}// 判断回文bool chkPalindrome(ListNode* A) {// 查找中间链表ListNode* midNode=middleNode(A);// 逆置后半段链表ListNode* remidNode=reverseList(midNode);while(remidNode && A){if(remidNode->val != A->val){return false;}remidNode=remidNode->next;A=A->next;}return true;}
};

注:关于查找单链表中间结点、逆置链表的实现,在OJ相关文章有详解,文章链接如下:

【数据结构】_链表经典算法OJ(力扣版)-CSDN博客文章浏览阅读1.3k次,点赞33次,收藏21次。4、考虑特殊情况及相应处理:(1)原链表为空:即head=NULL,导致curNode=NULL,不会进入第一个while循环,但在newTail->next=NULL 时会导致空指针解引用操作,出现错误。故需对newTail是否为空进行单独讨论处理。(2)新链表为空:即原链表所有结点数据域的值都等于val,导致newTail->next=NULL 时会导致空指针解引用操作,出现错误。同(1):需对newTail是否为空进行单独讨论处理。处理逻辑为:https://blog.csdn.net/m0_63299495/article/details/145355272https://blog.csdn.net/m0_63299495/article/details/145355272

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

相关文章:

  • 做网站空间不给账号密码嵌入式软件开发兼职
  • 厦门云端企业网站建设新手网站
  • 海南网站建设获客网站建设首期款
  • 保护环境做网站素材html写一个心形网页
  • 用jsp做网站的感想优化方案官网
  • 眼科医院网站建设方案最新公司起名大全免费
  • 枣庄市网站建设wordpress调用热评文章
  • 网站方案策划怎么写遵义市住房和城乡建设局网站
  • 珲春市建设局网站自己建网站程序
  • 做电商网站一般需要什么流程网站建设与开发试题与答案
  • 搭建网站需要学什么软件网站设计与开发专家
  • 电子商务网站建设汉狮seo实战培训视频
  • 建设项目环保竣工验收备案网站企业网站模板下载报价多少
  • wordpress 大学网站软件开发公司经营范围
  • 密云网站制作案例wordpress 新建数据表
  • cnzz统计代码放在后台网站为什么没显示重庆市住房和城乡建设厅网站首页
  • 哈尔滨门户网站设计报价百度云盘网官网
  • 网页设计网站哪个公司好在线手机建网站
  • 企业网站禁忌深圳建设网站公司哪家好
  • 衡水网站建设在哪里oppo手机商城
  • 梅州专业网站建设教程怎样做网站手机和电脑通用
  • 网站规划与开发在英特尔上建设网站可选择的方案有
  • 宿迁建站网制作网页时我们应当如何规避侵权风险
  • 网站如何做百度推广方案培训网站开发流程
  • 公司网站开发费用济南兴田德润o评价焦作seo公司
  • 二手房网站开发背景万江专业网站快速排名
  • 广州建设学校上海网站优化哪家好
  • 站长工具中文做轻奢品的电商网站
  • 县城房地产网站可以做吗如何 攻击网站
  • 有没有专门做游戏辅助的网站wordpress本地mp3