![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
LeetCode
立扣题目代码存储
夜阑優珲
我是真的懒。
展开
-
206.反转链表( 三(双)指针法 )
解题思路 1.三指针法:两个指针指向局部反转的两个节点操作反转,另外一个指针tmp保存其后链表的地址,反转前先用tmp保存地址,反转后指针2赋值给指针1,指针tmp赋值给指针2。 2.这里实际操作的是指针1和指针2,跳出while的条件用其中后面的那一个。 3.这里要注意原来的第一个节点反转后要指向NULL,只要将NULL也视为一个节点,指针1的初始值赋值为NULL即可统一操作。 代码 /** * Definition for singly-linked list. * struct ListNode原创 2020-11-15 09:02:21 · 183 阅读 · 0 评论 -
203.移除链表元素(添加虚拟头节点)
解题思路 1.通常要删除一个节点,我们需要得到它前面的一个节点,因此当要删除的节点是第一个节点时就要单独处理,特别是这里还有可能多次删除第一个节点。这种情况下可以在链表前人为添加一个节点,以其为开始就不用考虑上述问题了,即设立新的存储指针p来替换掉head,之后要返回操作后的链表时直接返回p->next即可。 2.指针顺着链表操作时while循环中的判断条件不一定是操作指针本身,其应当为每次操作的对象,如这里每次操作的就是q->next。 题目 /** * Definition for sin原创 2020-11-15 09:00:10 · 43 阅读 · 0 评论 -
160.相交链表(双指针法)
解题思路 1.双指针法:让指针1遍历完链表1后指向链表2的第一个节点,指针2遍历完链表2后指向链表1的第一个节点。这样指针1遍历完链表2后,和指针2遍历完链表1后走过的总距离就是一样的,因此当两个指针都进入第二个链表后就可以保证它们离表尾的距离相同,就可以轻松判断是否相交了。 2.链表的最后一个节点的next域通常是指向NULL的,指针在操作链表的时候也可以指向这个NULL(即指向最后一个节点还能->next),所以通常把这个NULL也理解为链表的一个节点来操作。比如在这里指针是指向NULL后再指向第原创 2020-11-15 08:57:28 · 124 阅读 · 0 评论 -
141.判断链表中是否有环(快慢指针)
解题思路 1.双指针法(快慢指针):设置两个工作指针,一个为fast,一个为slow,fast移动两次的同时slow移动一次,这样后每次slow就和fast拉开1个距离,如果链表中存在环,那么fast总有和slow相遇的时候,如果没有则fast会指到NULL或者next为NULL的地方 代码 /** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next;原创 2020-11-15 08:55:33 · 119 阅读 · 0 评论 -
83.删除排序链表中的重复元素
解题思路 1.注意所给链表为空的情况,此时结构体指针为NULL,即所指节点不存在。 代码 /** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */ struct ListNode* deleteDuplicates(struct ListNode* head){ struct ListNode *p = head;原创 2020-11-15 08:53:44 · 95 阅读 · 0 评论 -
21.合并两个有序链表
解题思路 1.注意链表为空的情况,此时传入的结构体节点指针指向的为NULL,即节点不存在;并且此处的链表是没有头节点的,因此空表不是头节点的Next域为空,而是节点指针为空。 2.其中合成新链表可以以原链表的第一个节点为开始,无需重新malloc新空间。 3.在操作链表时,通常让一个指针指向链表的头节点或第一个节点,并且保持其不动,用来存储链表的地址,然后再用其赋值给另外一个指针,这个指针用来对链表进行操作。此处共有两个链表就是用l1和l2来储存的,然后三个指针pa,pb,pc用来操作三个链表,操作完后直接原创 2020-11-15 08:46:14 · 93 阅读 · 0 评论