剑指offer(牛客)——从尾到头打印链表

简介: 剑指offer(牛客)——从尾到头打印链表

OJ连接从尾到头打印链表

C语言版本

思路:既然是要从尾到头的打印链表,那么我们就可以先将链表反转,然后进行遍历,存储到一个数组里面去,具体的代码实现如下

代码实现:

int* printListFromTailToHead(struct ListNode* head, int* returnSize ) {
    if(head==NULL)return NULL;
    //先反转链表
    struct ListNode* pre = NULL;
    struct ListNode* cur = head->next;
    //由于要存放到数组中,那么我们要动态申请一片空间,用count在
    //反转链表的同时能够确定要动态开辟内存的大小
    int count = 0;
    while(cur!=NULL)
    {
        count++;
        head->next=pre;
        pre=head;
        head=cur;
        cur=cur->next;
    }
    //最后一步连接head与pre,在计数一次
    head->next=pre;
    count++;
    //开始遍历
    struct ListNode* tmp = head;
    //申请内存
    int* arr = (int*)malloc(sizeof(int)*count);
    //用来表示数组的下标
    int i = 0;
    while(tmp!=NULL)
    {
        arr[i]=tmp->val;
        i++;
        tmp=tmp->next;
    }
    //count就是数组行数
    *returnSize = count;
    //返回数组名即可
    return arr;
}

JAVA版本

解题思路同C语言版本,这里就直接给出代码如何去实现

import java.util.*;
public class Solution {
    public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
        ArrayList<Integer> list = new ArrayList<>();
        if(listNode==null)return list;
        //反转链表
        ListNode pre = null;
        ListNode cur = listNode.next;
        while(cur!=null){
            listNode.next=pre;
            pre=listNode;
            listNode=cur;
            cur=cur.next;
        }
        listNode.next=pre;
        cur=listNode;
        while(cur!=null){
            list.add(cur.val);
            cur=cur.next;
        }
        return list;
    }
}


总结

以上就是对于剑指offer(牛客)第一题个人给出的一个解法,实际上对于本题只需想到反转链表进行遍历即可,其实还是考察对于链表的基本操作,只需要画一个图理解,这种题并不算难题,之后有空我会在持续更新剑指offer后面的解法

目录
相关文章
|
24天前
(剑指offer)18、删除链表的节点—22、链表中倒数第K个节点—25、合并两个排序的链表—52、两个链表的第一个公共节点(2021.12.07)
(剑指offer)18、删除链表的节点—22、链表中倒数第K个节点—25、合并两个排序的链表—52、两个链表的第一个公共节点(2021.12.07)
41 0
|
3月前
|
Python
【Leetcode刷题Python】剑指 Offer 22. 链表中倒数第k个节点
Leetcode题目"剑指 Offer 22. 链表中倒数第k个节点"的Python解决方案,使用双指针法找到并返回链表中倒数第k个节点。
51 5
|
3月前
|
Python
【Leetcode刷题Python】剑指 Offer 18. 删除链表的节点
Leetcode题目"剑指 Offer 18. 删除链表的节点"的Python解决方案,通过使用双指针法找到并删除链表中值为特定数值的节点,然后返回更新后的链表头节点。
40 4
|
6月前
【一刷《剑指Offer》】面试题 17:合并两个排序的链表
【一刷《剑指Offer》】面试题 17:合并两个排序的链表
|
6月前
【一刷《剑指Offer》】面试题 16:反转链表
【一刷《剑指Offer》】面试题 16:反转链表
|
6月前
【一刷《剑指Offer》】面试题 15:链表中倒数第 k 个结点
【一刷《剑指Offer》】面试题 15:链表中倒数第 k 个结点
|
6月前
|
机器学习/深度学习
【一刷《剑指Offer》】面试题 13:在 O(1) 时间删除链表结点
【一刷《剑指Offer》】面试题 13:在 O(1) 时间删除链表结点
|
6月前
【一刷《剑指Offer》】面试题 5:从尾到头打印链表
【一刷《剑指Offer》】面试题 5:从尾到头打印链表
|
6月前
剑指 Offer 18. 删除链表的节点
剑指 Offer 18. 删除链表的节点
42 0
|
5月前
|
存储 SQL 算法
LeetCode力扣第114题:多种算法实现 将二叉树展开为链表
LeetCode力扣第114题:多种算法实现 将二叉树展开为链表