C\C++刷题DAY4
创始人
2024-02-05 04:44:54
0

目录

1.第一题

2.第二题

3.第三题

4.第四题

5.第五题


1.第一题

206. 反转链表 - 力扣(LeetCode)

 思路:调转指向关系,使用双指针的思想

1指向2,改成2指向1,以此类推。

参考代码:

struct ListNode* reverseList(struct ListNode* head)
{if(head==NULL)return NULL;struct ListNode *n1, *n2, *n3;n1 = NULL;n2 = head;n3 = n2->next;while(n2){n2->next = n1;n1 = n2;n2 = n3;if(n3){n3 = n3->next;}}return n1;
}

PS:

上述的这种实现的方式是用迭代的思想,那么为什么不同递归的思想取解决问题呢?

这是因为递归是有缺陷的,如果递归的深度太深的话,可能会造成栈溢出。

因此对于简单问题,能够迭代去解决的话,尽量用迭代解决

当遇见那种用迭代无法轻易解决的问题,才考虑去使用递归解决。

2.第二题

876. 链表的中间结点 - 力扣(LeetCode)

思路:

快慢指针的思想(双指针):一个指针块,一个指针慢

slow指针一次走一个节点

fast指针一次走2个节点

两种速度相差一倍,可知当fast走完的时候,slow刚好走到中间位置。

参考代码:

struct ListNode* middleNode(struct ListNode* head)
{struct ListNode *fast, *slow;fast = slow = head;while(fast && fast->next){slow = slow->next;fast = fast->next->next;}return slow;
}

3.第三题

链表中倒数第k个结点_牛客题霸_牛客网 (nowcoder.com)

 思路分析:快慢指针

 fast先走k步,然后fast和slow一起走,那么当fast走完的时候,slow还没有走完,那么这个时候,两者的差就显示了倒数第k个节点。

fast走k-1步,也是同理。

参考代码:

struct ListNode* FindKthToTail(struct ListNode* pListHead, int k ) 
{// write code herestruct ListNode *fast, *slow;fast = slow = pListHead;//fast先走k步while(k--){if(fast==NULL){return NULL;}fast = fast->next;}while(fast){slow = slow->next;fast = fast->next;}return slow;
}

4.第四题

链表分割_牛客题霸_牛客网 (nowcoder.com)

 

 分析:

将小于x的节点拿下来尾插成一个新的链表

将大于等于x的节点拿下来尾插成一个新的链表

最后链接这两个链表就行

PS:看到尾插就想到用哨兵位的头节点

参考代码:

class Partition {
public:ListNode* partition(ListNode* pHead, int x){// write code herestruct ListNode *lessHead, *lessTail, *greaterHead, *greaterTail;lessHead = lessTail = (struct ListNode*)malloc(sizeof(struct ListNode));greaterHead = greaterTail = (struct ListNode*)malloc(sizeof(struct ListNode));lessTail->next = greaterTail->next =NULL;struct ListNode *cur =pHead;while(cur){if(cur->val < x){lessTail->next = cur;lessTail = lessTail->next;}else{greaterTail->next = cur;greaterTail = greaterTail->next;}cur = cur->next;}lessTail->next = greaterHead->next;greaterTail->next = NULL;pHead = lessHead->next;free(lessHead);free(greaterHead);return pHead;}
};

5.第五题

链表的回文结构_牛客题霸_牛客网 (nowcoder.com)

 分析:

回文结构:类似于古诗写法的术语,正着读和反着读是一样的

比如12321,从左到右和从右到左读是一样的。

 PS:将后半段的反转之后在和前的半段的比较。

如果相等返回true

如果不等返回flase

参考代码:

class PalindromeList
{
public://找到中间位置的节点struct ListNode *middleNode(struct ListNode* head){struct ListNode *fast, *slow;slow = fast = head;while(fast && fast->next){slow = slow->next;fast = fast->next->next;}return slow;}//反转链表struct ListNode* reverseList(struct ListNode* head){struct ListNode* cur =head;struct ListNode* rhead = NULL;while(cur){struct ListNode* next =cur->next;rhead =cur;cur = next;}return rhead;}bool chkPalindrome(ListNode* A) {// write code herestruct ListNode* mid = middleNode(A);struct ListNode* rhead = reverseList(mid);while(A && rhead){if(A->val!=rhead->val)return false;A = A->next;rhead = rhead->next;}return true;}
};

相关内容

热门资讯

观山湖区人社局 “社保服务进万... 2025 年 11 月7日,贵阳市观山湖区人力资源和社会保障局开展 “社保服务进万家 真情温暖你我他...
高志凯:日本能推翻1945年对... 苏州大学讲席教授、全球化智库(CCG)副主任高志凯12月5日接受北京日报客户端记者专访时表示,如果日...
原创 赵... 一个因饰演正义警察而深入人心的演员,今天在经纪公司发布的声明中承认高中时期犯罪行为并宣布结束自己的演...
原创 已... 本赛季,皇马在比赛中遇到的问题,与安切洛蒂执教时几乎一致。前锋进球不少,但防守端问题较为突出导致球队...
安置房里解难题 广场服务暖人心... 为让社保政策精准落地、惠及民生,10 月 24 日,贵阳市观山湖区人力资源和社会保障局社保主题“全民...
原创 谈... 最近俄乌局势的“谈判大戏”终于出了阶段性结果,美俄高层坐下来聊了五个多小时,没达成最终协议却藏着不少...
因融资融券交易纠纷,东海证券起... 天眼查APP显示,近日,东海证券股份有限公司新增一则开庭公告,案由为“融资融券交易纠纷”,原告为东海...
不怕起诉怕上访?营商环境优化的... 听闻企业说“如果问题久拖不决,将逐级上访”,政府部门负责人很紧张。据新华社《半月谈》报道,一些地方存...
被竞品“碰瓷拉踩”?东风日产法... 刚上市的新车N6订单正忙于交付,竟被直接竞品“碰瓷营销”?近日,东风日产法务部发布声明称,多个网络自...
贵州前首富姜伟风波骤起:遭华创... 本文来源:时代周报 作者:周松清 贵州前首富姜伟风波不断。 12月3日晚间,贵州百灵(002424....