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

做网站首页文字排版技巧开源系统网站

做网站首页文字排版技巧,开源系统网站,dedecms蓝色企业网站模板,网站建设设计收费目录 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/252504/

相关文章:

  • 在什么网站做贸易好如何制作一个网页
  • 网站建设证有3d做网站
  • 自己做服务器的网站吗建设官方网站首页
  • 网站开发综合实训记录周记重庆建设工程信息网30系统
  • 个人简历免费制作网站文件外链
  • 工业信息化部网站备案网站别人做的我自己怎么续费
  • 安装网站模版视频陕西省建设造价协会网站
  • 下载了网站模板怎么用网上书城网站建设目的
  • 网站开发语言怎么识别wordpress调用最近发布的文章
  • 优化网站排名哪家好黑龙江建设安全监督网查询
  • 做网站云服务期app推广员是做什么的
  • 网站备案证书下载不了wordpress 评论框 模板
  • 苏州工业园区建设网站网站空间站
  • 南宁房地产最新消息企业网站seo诊断工具
  • 外管局网站先支后收怎么做报告0元购怎么在网站做
  • 网上黑赌网站如何做代理宁波seo排名公司
  • 网站框架怎么搭建投稿网站源码
  • 个人空间网站免费建立平台的目的
  • 建设项目查询网站视差网站
  • 网站自适应框架北京建设公司网站建设
  • 巴中做网站的公司如何注册海外域名
  • 贵阳高端网站开发制作用struts2框架做的网站
  • 下载网站专用空间我想创建一个网站自己玩玩
  • 网页美工设计师就业能力要求保定百度推广优化排名
  • 网站建设公司郑州wordpress博客密码
  • 站长统计app网站网站支付页面设计
  • 那家建网站宝盒好用山东省建设厅制一网站
  • 学校 html5 网站 案例网站建设购买模板
  • 电子政务与网站建设的经验网线制作的步骤
  • 网页制作素材网站河南造价信息网官网