leetcode-剑指offer-06:从尾到头打印链表

题目描述

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

方法一

解题思路

  • 递归,将链表节点的值依次返回

代码实现

/**
 * Definition for singly-linked list.
 * type ListNode struct {
 *     Val int
 *     Next *ListNode
 * }
 */
func reversePrint(head *ListNode) []int {
    if head == nil {
        return make([]int, 0)
    }
    return append(reversePrint(head.Next), head.Val)
}

方法二

解题思路

  • 反转链表

代码实现

/**
 * Definition for singly-linked list.
 * type ListNode struct {
 *     Val int
 *     Next *ListNode
 * }
 */
func reversePrint(head *ListNode) []int {
    var tmp *ListNode
    for head != nil {
        next := head.Next
        head.Next = tmp
        tmp = head
        head = next
    }

    res := make([]int, 0)
    for tmp != nil {
        res = append(res, tmp.Val)
        tmp = tmp.Next
    }
    return res
}

方法三

解题思路

  • 反转数组

代码实现

/**
 * Definition for singly-linked list.
 * type ListNode struct {
 *     Val int
 *     Next *ListNode
 * }
 */
func reversePrint(head *ListNode) []int {
    res := make([]int, 0)
    for head != nil {
        res = append(res, head.Val)
        head = head.Next
    }

    return reverseArr(res)
}

func reverseArr(arr []int) []int {
    for i := 0; i < len(arr) / 2; i++ {
        arr[i], arr[len(arr) - 1 - i] =  arr[len(arr) - 1 - i], arr[i]
    }
    return arr
}

版权声明:本文为yc______原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。