剑指Offer-链表-链表中倒数第k个结点

06. 从尾到头打印链表

输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。

解题思路:

  • 链表特点:只能从前至后访问每个节点
  • 题目要求:倒序输出节点值

算法流程:

  • 入栈:遍历链表,各节点入栈(python使用append方法
  • 出栈:将各节点pop出栈,储存数值并返回。(python直接返回stack倒序列表

复杂度分析:

  • 空间复杂度:O(N)
  • 时间复杂度:O(N)

代码实现:

class Solution:
    def reversePrint(self, head: ListNode) -> List[int]:
        resList = []
        while head:
            resList.append(head.val)
            head = head.next
        return resList[::-1]

22.链表中倒数第k个结点

输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。
示例:
在这里插入图片描述
解题思路:

  • 利用快慢指针截取输出片段:第一个指针从链表的头指针开始先向前走k步,第二个指针保持不动,从第k+1步开始,第二个指针也从头开始前进,两个指针都每次前进一步。这样,两个指针的距离都一直保持在k,当快指针(走在前面的)到达null时,慢指针(走在后面的)正好到达第k个结点。注意:要时刻留意空指针的判断。

算法流程:

  • 快指针先走k(倒数节点)步
  • 慢指针和快指针同时前进
class Solution:
    def getKthFromEnd(self, head: ListNode, k: int) -> ListNode:
        #快慢指针
        fast = slow = head
        while k>0:
            fast = fast.next
            k -= 1
        while fast != None:
            fast = fast.next
            slow = slow.next
        return slow
发布了44 篇原创文章 · 获赞 3 · 访问量 2590

猜你喜欢

转载自blog.csdn.net/xfxlesson/article/details/104584100