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