按照上面图解分析,fast快指针指向节点【3】的时候才算真正初始化快慢指针完成。
当快指针指向节点【5】时,slow慢节点指向节点【3】
注意:中间省略了一步,即慢指针指向节点【2】时,快指针指向节点【4】
节点【5】是最后一个节点,再次进入while循环。
最后一次循环时,慢指针指向了4,快指针下一个节点已经为null,此时结束循环。
五,移除重复节点 1.5.1 题目分析这道题和上一篇中的题目【删除排序链表中的重复元素】是一样的,简单的做法即利用Set集合保存未重复的节点,再遍历链表判断是否已存在Set集合中。
因此本道题就不在多分析,直接贴上代码。
1.5.2 代码分析 Set<Integer> set = new HashSet<>(); ListNode temp = head; while(temp != null && temp.next != null){ set.add(temp.val); if(set.contains(temp.next.val)){ temp.next = temp.next.next; }else{ temp = temp.next; } } return head; } 六,总结本次文章共分享总结5道题目,仔细分析有没有发现这些题套路都是一样的。都利用了双指针的思想,通过一定的规则移动快慢指针获取指定链表节点。
本次的5道题目和上次的3道题目,基本已经包含了链表简单题目的所有类型。当你把本篇文章的题目看完后,关于链表的简单题目你也已经做完了。
本人已经将链表的所有简单题目刷完,总结出来的结论即套路都是一样的。简单来说,大部分的题目都可以利用双指针,递归,数组来完成。
在下篇文章中会对链表的简单题目做一个小总结。
最后,求关注原创不易,每一篇都是用心在写。如果对您有帮助,就请一键三连(关注,点赞,再转发)
我是杨小鑫,坚持写作,分享更多有意义的文章。
感谢您的阅读,期待与您相识!