输入一个链表,反转链表后,输出链表的所有元素。

// test14.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include<iostream>
#include<fstream>
#include<string>
#include<cctype>
#include <vector>
#include<exception>
#include <initializer_list>
#include<stack>
using namespace std;


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

  class Solution {
  public:
	  ListNode* ReverseList(ListNode* pHead) {
		  //把链表中的元素首先存入一个栈中
		  //从栈中一个一个地读出数据插入rlist中
		  ListNode *rlist=pHead;
		  stack<int> temp;
		  while (rlist !=NULL)
		  {
			  temp.push((*rlist).val);
			  rlist = rlist->next;
		  }
	
		  rlist = pHead;
	
		  while (rlist !=NULL)
		  {
			 if(!temp.empty())
			 { 
			  (*rlist).val = temp.top();
			  temp.pop();
			  rlist=(*rlist).next;//一开始这个地方忘了更新rlist了,结果一直出现栈溢出这个问题
			 }
		  }

		  return pHead;
	  }
  };

int main()
{
	int num;
	vector<int> vec;
	Solution so;
	
	ListNode first(1);
	ListNode second(2);
	ListNode third(3);
	ListNode four(4);
	ListNode *head=&first;
	first.next = &second;
	second.next = &third;
	third.next = &four;
	
	ListNode *result= so.ReverseList(head);
	while (result !=NULL)
	{
		cout << (*result).val<<"  ";
		result = (*result).next;
	}
	cout << endl;
	
	return 0;
}
原文地址:https://www.cnblogs.com/wdan2016/p/5955497.html