#数据结构与算法学习笔记#剑指Offer3:从尾到头打印链表(Java、C/C++)

234 篇文章 1 订阅
80 篇文章 0 订阅
这篇博客介绍了如何使用栈解决《剑指Offer》中的一道问题,即输入一个链表,按值从尾到头的顺序返回ArrayList。博主提供了Java和C++两种语言的实现代码,并鼓励读者留言点赞。
摘要由CSDN通过智能技术生成

2018.7.29     《剑指Offer》从零单刷个人笔记整理(66题全)目录传送门​​​​​​​

很明显了,用栈解决。


题目描述

输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。


JAVA实现:

/**
 * 
 * @author ChopinXBP
 * 输入一个链表,从尾到头打印链表每个节点的值。
 * 思路:压入栈
 *
 */
import java.util.Stack;
import java.util.ArrayList;


class ListNode {
	int val;
	ListNode next = null;

	ListNode(int val) {
		this.val = val;
	}
}

public class printListFromTailToHead_3 {
    public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
        Stack<Integer> stack = new Stack<>();
        while (listNode != null) {
            stack.push(listNode.val);
            listNode = listNode.next;
        }
 
        ArrayList<Integer> list = new ArrayList<>();
        while (!stack.isEmpty()) {
            list.add(stack.pop());
        }
        return list;       
    }
}

C++实现:

/*
* 输入一个链表,从尾到头打印链表每个节点的值。
*/

#include "stdafx.h"
#include <vector>
#include <stack>
using namespace std;

/*


最佳解答1:压入栈

class Solution
{
public:
	vector<int> printListFromTailToHead(ListNode* head)
	{
		vector <int>  result;
		stack<int> arr;
		ListNode* p = head;
		while (p != NULL)
		{
			arr.push(p->val);
			p = p->next;
		}
		int len = arr.size();
		for (int i = 0; i<len; i++)
		{
			result.push_back(arr.top());
			arr.pop();
		}
		return  result;
	}

};


最佳解答2:不断前插

class Solution {
public:
	vector<int> printListFromTailToHead(ListNode* head) {
		vector<int> value;
		if (head != NULL)
		{
			value.insert(value.begin(), head->val);
			while (head->next != NULL)
			{
				value.insert(value.begin(), head->next->val);
				head = head->next;
			}

		}
		return value;
	}
};
*/



  struct ListNode {
        int val;
        struct ListNode *next;
        ListNode(int x) :
              val(x), next(NULL) {
        }
  };

class Solution {
public:
	vector<int> printListFromTailToHead(ListNode* head) {
		vector<int> data;
		if (head == NULL || head->next == NULL)return data;

		ListNode*p = head;
		int q[100];
		int count = 0;

		while (p->next != NULL){
			q[count] = p->val;
			p = p->next;
			count++;
		}
		q[count] = p->val;

		for (int i = count; i >= 0; i--){
			data.push_back(q[i]);
		}

		return data;		
	}
};

#Coding一小时,Copying一秒钟。留个言点个赞呗,谢谢你#

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值