链表
链表问题
梅杏柿
这个作者很懒,什么都没留下…
展开
-
Leetcode 第19题 删除链表的倒数第 N 个结点C++解法
就是找倒数第N个结点,然后删除 双指针解决罢了。比较麻烦的问题在于如果删除的是最后一个结点是怎么办。我想到的记录要删除的结点的前一个结点,而且开始得判断如果是长度为1,返回null。但是还是蠢 class Solution { public: ListNode* removeNthFromEnd(ListNode* head, int n) { if(!head->next) return nullptr; int i=0;原创 2021-03-08 11:55:57 · 110 阅读 · 0 评论 -
Leetcode第25题 K 个一组翻转链表C++解法
先用的迭代实现,用了很多引用传参。估计有很多需要优化的后面再说。 递归的实现方法也后面再说。 class Solution { public: ListNode *reverselist(ListNode *&head, int &k, int &i) { ListNode *result = head,*pmove=head; head=head->next; pmove->next=nullptr; whi原创 2021-02-01 19:18:38 · 78 阅读 · 0 评论 -
Leetcode 第234题 回文链表 C++解法
一开始看到下面的提示,我就先考虑了下思路。 最简单思路,把链表复制到数组里面。主要花在了空间复杂度上。但空间复杂度高。 如果要求空间复杂度常数,想到的就是反转后半部分链表。但是又觉得是不是太麻烦。对了下答案,还真是这中思路。 唯一思路没通的是递归解法。 1、最简单思路 class Solution { public: bool isPalindrome(ListNode* head) { vector<int> p; int i=-1,j=0;原创 2021-02-01 18:31:09 · 104 阅读 · 0 评论 -
Leetcode第206题 反转链表C++解法
我是先做的92题,这回过头来做,自然很容易就解答出来。反转的循环有四步,只要缕清这四步就没问题。注意加上链表为空的情况即可。 class Solution { public: ListNode* reverseList(ListNode* head) { if(head==nullptr) return head; ListNode *nhead=head; ListNode *temp=head; head=head-原创 2021-01-20 18:31:23 · 79 阅读 · 1 评论 -
Leetcode第92题 反转链表 II C++解法
老规矩先上本方法,要求一遍遍历,所以先设置一个备用链表。找到起始位置后,新增结点,并使每一个新增结点的next设置为上次的结点,记录反转的开始前位置和结束后位置,反转区间结束后,是前位置链接到临时链表开头,临时链表的结尾和没有原链表后面接上。为了涵盖从1开始的情况,所以备用链表从空节点0开始,故而返回的时候返回chead->next; /** * Definition for singly-linked list. * struct ListNode { * int val; *原创 2021-01-19 22:06:25 · 136 阅读 · 0 评论