美文网首页
链表复盘

链表复盘

作者: TinkleJane | 来源:发表于2019-04-28 22:37 被阅读0次

week2-链表复盘

Day 1: https://leetcode-cn.com/problems/design-linked-list/

采用单链表,然后试了js、C#两套代码执行通过,提交都没有通过,最后看了不通过的测试用例是因为插入了index=-1的元素,而题目中指出插入位置是0-index中之前插入,所以不清楚测试用例中[-1,0]是如何插入的

根据测试用例

["MyLinkedList","addAtHead","addAtTail","addAtHead","addAtTail","addAtHead","addAtHead","get","addAtHead","get","get","addAtTail"] [[],[7],[7],[9],[8],[6],[0],[5],[0],[2],[5],[4]]

输出

[null,null,null,null,null,null,null,-1,null,6,8,null]

预期结果

[null,null,null,null,null,null,null,8,null,6,7,null]

发现每次get都后移了一位,于是把p初始指向head,再执行代码

结果是[null,null,null,null,null,null,null,8,null,0,7,null] ,仍有一位不对,发现addAtHead一个节点后似乎一下增加了两个节点,这显然不可能,最后发现是尾节点没有再addAtTail后跟着赋值,增加rear=s;后所有取值又往前移了一位,所以之前的get方法没有问题改回。

public int Get(int index) {

int i=-1;

ListNode p = head;

while(p!=null){

if(++i == index){

return p.val;

}

p=p.next;

}

return -1;

}

public void AddAtTail(int val) {

ListNode s = new ListNode(val);

s.next = null;

rear.next = s;

rear = s; //忘记尾节点赋值

}

Day 2: https://leetcode-cn.com/problems/remove-duplicates-from-sorted-list/

这个相对简单,思路是拿当前节点的值和下一个节点比较,如果相同,node.next = node.next.next;如果不同,指针后移一位继续比较,需要注意判断比较的两个节点不能为null。

public class Solution {

public ListNode DeleteDuplicates(ListNode head) {

ListNode node = head;

while(node != null && node.next != null){

if(node.next.val == node.val){

node.next = node.next.next;

}else{

node = node.next;

}

}

return head;

}

}

Day 3:https://leetcode-cn.com/problems/merge-two-sorted-lists/

合并两个排序链表,分别从头开始取两个链表的头结点比较,返回较小节点值的链表指针,并将较小的节点往后移一位再次进行比较,是一个递归调用的过程,需要注意的是两个链表都可能为空的情况。

public class Solution {

public ListNode MergeTwoLists(ListNode l1, ListNode l2) {

if(l1 == null){

return l2;

}

if(l2 == null){

return l1;

}

if(l1.val <l2.val){

l1.next = MergeTwoLists(l1.next, l2);

return l1;

}else{

l2.next =MergeTwoLists(l1, l2.next);

return l2;

}

}

}

Day 4: https://leetcode-cn.com/problems/reverse-linked-list/

反转相当于从不表节点的头结点开始按照addAtHead的方式插入新的链表

public class Solution {

public ListNode ReverseList(ListNode head) {

ListNode resHead = null;

while(head!=null){

ListNode newNode = head.next;

head.next = resHead;

resHead = head;

head = newNode;

}

return resHead;

}

}

Day5:https://leetcode-cn.com/problems/linked-list-cycle/

循环链表,原理就是快慢指针,就是在一个圆形跑道上,同一起点,跑的快的和跑的慢的肯定可以多次相遇

public class Solution {

public bool HasCycle(ListNode head) {

ListNode slow = head, fast = head;

while(slow!=null && fast!=null && fast.next !=null){

slow=slow.next;

fast = fast.next.next;

if(slow == fast){

return true;

}

}

return false;

}

}

Day 6:https://leetcode-cn.com/problems/intersection-of-two-linked-lists/

参考评论区的解法,计算出headA和headB中那个链表最长,计算出长度把长度较长的链表偏移,使两个链表对齐。最后同同时遍历两个链表,如果相等 说明它们相交了。

相关文章

  • 链表复盘

    week2-链表复盘 Day 1: https://leetcode-cn.com/problems/design...

  • AAR复盘工具

    大家好, 我是阿萨。 复盘相信大家都听过。日复盘,周复盘,月复盘,年度复盘,工作复盘,项目复盘。生活中时时处处都会...

  • 团队复盘盘什么?

    导读: 1、什么是复盘? 2、为什么要复盘? 3、复盘盘什么 4、如何做好复盘 01 什么是复盘 复盘,本是围棋术...

  • 人生怎么能没有复盘!?

    说到复盘,现在特别流行,日复盘、周复盘、月复盘、演讲复盘等等,为什么要复盘?有句话是这样说的:没有复盘的人生是不会...

  • 盘点复盘(一)

    一、复盘三种类型 自我复盘、团队复盘和复盘他人。 自我复盘:是个人获得成长的方便手段。 团队复盘:可以让复盘主导人...

  • 复盘可以解决很多事

    越读复盘会发现,越在复盘实践中发现,复盘可以盘万事万物。 可以事件复盘,可以人物复盘,可以情绪复盘,只要掌握复盘思...

  • 复盘的三种类型

    复盘有三种类型:自我复盘、团队复盘和复盘他人。 自我复盘可以随时进行,是个人获得成长的方便手段。团队复盘可以让复盘...

  • 做到这一点,个人成长提升的速度就会很快

    想要快速提升个人能力,那就必须要做复盘,可每日复盘、每事复盘,周周复盘,月月复盘,年年复盘。 复盘是对思维的训练,...

  • 03复盘的三种类型

    (100天阅读习惯之10/100) 复盘可以分为:自我复盘、团队复盘和复盘他人。 1.自我复盘 自我复盘随时可以进...

  • 复盘(刘健)

    凡事皆可被复盘,人人皆可学复盘。通过复盘的系统方法,建立复盘的基础认知。应用于项目复盘、业务复盘、团队复盘、工作场...

网友评论

      本文标题:链表复盘

      本文链接:https://www.haomeiwen.com/subject/dfpsnqtx.html