剑指offer
很菜的小周
想从事大数据的菜鸟
展开
-
JZ23 链表中环的入口结点
快慢指针可以很容易判断一条链表是否存在环,快指针fast每次走两步,慢指针slow每次走一步,那么若进入环中,每次他们之间的相对距离都会-1,直到两者相遇。所以,我们把快指针移到头结点,一次走一步,让慢指针继续走,当两个指针再次相遇时所处的位置就是环的入口结点位置。假设从头结点到环入口结点的前一个结点有:a个。(n为快指针比慢指针多走过的圈数)fast指针走过的结点数为:f个。slow指针走过的结点数为:s个。两指针相遇时,慢指针已经走了。而走到入口结点,需要走。原创 2023-03-27 14:55:26 · 42 阅读 · 0 评论 -
剑指offer:JZ6从尾到头打印链表(两种经典方法)
设置计数器,遍历链表得出链表结点个数,然后创建相同空间大小的数组。然后重新遍历链表,按从后往前的顺序将链表结点中的数据放入数组中,然后返回数组。输入一个链表的头节点(不带头结点),按链表从尾到头的顺序返回每个节点的值(用数组返回)。原创 2022-11-28 21:28:08 · 122 阅读 · 1 评论 -
剑指offer:JZ24反转链表(两种空间复杂度为O(1)的实现)
遍历找到最后一个结点和倒数第二个结点,然后把倒数第一个结点取出来当作头结点,倒数第二个结点的next指针指向NULL,然后从原链表的头结点开始遍历并以头插法插入到最后一个结点后面。给定一个单链表的头结点pHead(该头节点是有值的,比如在下图,它的val是1),长度为n,反转该链表后,返回新链表的表头。cur为当前需要操作的指针,pre为待返转链表中cur的前一个结点指针,next为待返转链表中cur的后一个结点指针。经反转后,原链表变为{3,2,1},所以对应的输出为{3,2,1}。原创 2022-11-28 21:06:45 · 271 阅读 · 0 评论