剑指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后面的解法

目录
相关文章
|
5天前
《剑指offer》——合并两个排序的链表
《剑指offer》——合并两个排序的链表
|
5天前
|
Java C语言
剑指offer(牛客)——合并两个排序的链表
剑指offer(牛客)——合并两个排序的链表
9 1
|
5天前
《剑指offer》——从尾到头打印链表
《剑指offer》——从尾到头打印链表
|
5天前
|
算法
《剑指offer》之从“尾到头打印链表”题解
《剑指offer》之从“尾到头打印链表”题解
15 2
|
5天前
剑指 Offer 52:两个链表的第一个公共节点
剑指 Offer 52:两个链表的第一个公共节点
15 0
|
5天前
|
算法
LeetCode刷题---19. 删除链表的倒数第 N 个结点(双指针-快慢指针)
LeetCode刷题---19. 删除链表的倒数第 N 个结点(双指针-快慢指针)
|
5天前
|
存储
LeetCode刷题---817. 链表组件(哈希表)
LeetCode刷题---817. 链表组件(哈希表)
|
5天前
【移除链表元素】LeetCode第203题讲解
【移除链表元素】LeetCode第203题讲解
|
5天前
|
算法 安全 数据处理
LeetCode刷题---707. 设计链表(双向链表-带头尾双结点)
LeetCode刷题---707. 设计链表(双向链表-带头尾双结点)
|
5天前
leetcode代码记录(移除链表元素
leetcode代码记录(移除链表元素
11 0