![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
链表
只会写臭虫
这个作者很懒,什么都没留下…
展开
-
Leetcode K 个一组翻转链表
思路:先找出这k个结点组成的链表,然后利用常规的单链表翻转方法进行翻转。需要一个指针lastEnd记录已经翻转后形成的链表的尾结点,还需要一个指针nextHead记录下一个待翻转的链表的链头,然后需要start和end记录当前需要翻转的k个结点组成的链表的表头和表尾,需要注意的是在调用reverse()进行子链表翻转之前需要把end的next赋值为NULL,然后翻转后新的链表的表头为end,表尾是next。代码:class Solution {public: ListNode* rever.原创 2020-05-23 12:06:05 · 289 阅读 · 0 评论 -
LeetCode 两数相加(链表)
思路:因为链表的表示是逆序的,所以思路就是模拟两个数从个位相加的操作。考虑上进位。解法1: 首先我的想法是尽量利用现有的结点,通过改变结点值和指点的指向,因为题目里说了都是非空链表,所以我选择将l1链表作为最后返回的链表。然后分为了三种情况进行考虑,具体解释在代码注释里。代码:class Solution {public: ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) { ListNode* head=l1; /.原创 2020-05-22 17:07:09 · 465 阅读 · 0 评论 -
如何寻找单链表的中间节点(快慢指针)
设置两个指针,一个快指针,每次走两步,一个慢指针,每次走一步,直到快指针走到链尾。public class searchMid { public Node method(Node head) { Node p=head; Node q=head; while(q!=null&&q.next!=null&&q.next.next!=null) {...原创 2019-08-15 14:55:54 · 342 阅读 · 0 评论 -
LeetCode 86 分隔链表
思路就是为小于k的结点链表设置一个表头,并用pcur记录新链的最后一个结点,当遍历到小于k的结点时,将pcur指向当前节点,更新pcur。用pre记录上一个大于等于k的结点(注意pre的next要设为空),当遍历到大于等于k的结点时,将pre指向当前节点,更新pre。最后将pcur指向fnode(fnode记录的是第一个大于等于k的结点)。代码:/** * Definition for s...原创 2019-08-16 09:58:46 · 84 阅读 · 0 评论 -
剑指offer:删除链表中的重复结点(重复的结点不保留)
题目描述在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5思路:因为这题要把结点重复的都删除,所以要考虑当第一二个结点就重复的情况。所以设立一个虚拟头结点,pre初始指向这个虚拟头结点。这里要用一个flag记录当前节点是否是连...原创 2019-08-16 18:21:11 · 61 阅读 · 0 评论 -
LeetCode.83 删除排序链表中的重复元素(保留一个数字)
借助一个虚拟头结点,每次保存重复结点的最后一个结点。/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solutio...原创 2019-08-16 18:52:22 · 90 阅读 · 0 评论 -
LeetCode 141.链表判环, LeetCode 142.并找出环的入口
判环利用快慢指针,若快指针遍历完链表之前快慢指针没有相遇的话,则说明链表中有环。代码:/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * };...原创 2019-08-17 00:24:04 · 335 阅读 · 0 评论 -
LeetCode 234. 回文链表
请判断一个链表是否为回文链表。class Solution {public: bool isPalindrome(ListNode* head) { if(!head) return true; //利用快慢指针找出链表的中点 ListNode* fast=head; ListNode* slow...原创 2019-08-17 12:51:25 · 99 阅读 · 0 评论 -
反转链表
方法一:三指针法每次记录当前遍历指针cur,前一个指针pre,和下一个指针nextclass Solution {public: ListNode* reverseList(ListNode* head) { ListNode* pre=NULL; ListNode* cur=head; while(cur){ ...原创 2019-08-17 13:36:41 · 86 阅读 · 0 评论