借助栈实现单链表的原地逆置

借助栈实现单链表的原地逆置

【问题描述】首先建立一个单链表,通过栈实现该链表的原地逆置,注意仅使用链表中的原有的结点空间,结点的数据成员为int型。注意这个题需要单链表和栈两个类。

【输入形式】输入只有一行,依次输入若干个整数,整数之间用一个空格分开,最后以-1结束,用表尾添加结点的方法建立一个单链表。

【输出形式】输出有2行,第1行为原链表数据,第2行为逆置后的链表数据,具体格式见样例输出

【样例输入】

1 2 3 4 5 -1
【样例输出】

1–>2–>3–>4–>5

5–>4–>3–>2–>1

代码如下:
#include<iostream>

using namespace std;

struct LinkNode
{
	int data;
	LinkNode* link;
	LinkNode()
	{
		link = NULL;
	}
	LinkNode(int x)
	{
		data = x;
		link = NULL;
	}
};

class LinkList
{
public:
	LinkList()
	{
		head = new LinkNode;
	}
	~LinkList()
	{
	}
	void creat()
	{
		int num = -1;
		LinkNode* NewNode = NULL, * current = head;
		while (cin >> num && num != -1)
		{
			NewNode = new LinkNode(num);
			current->link = NewNode;
			current = NewNode;
		}
	}
	LinkNode* get_head()
	{
		return head;
	}
	void display()
	{
		LinkNode* p = head->link;
		while (p->link != NULL)
		{
			cout << p->data << "-->";
			p = p->link;
		}
		cout << p->data << endl;
	}
private:
	LinkNode* head;
};

class Stack
{
public:
	Stack()
	{
		top = NULL;
	}
	~Stack()
	{

	}
	void all_push(LinkNode* T)
	{
		top = T;
		LinkNode* current=T->link;
		while (current != NULL)
		{
			T = current;
			current = T->link;
			T->link = top;
			top = T;
		}
	}
	void all_pop(LinkNode* head)
	{
		while (top->link != head)
		{
			cout << top->data << "-->";
			top = top->link;
		}
		cout << top->data << endl;
	}
private:
	LinkNode* top;
};

void change(LinkList& s,Stack& temp)
{
	LinkNode* t = s.get_head();
	temp.all_push(t);
	temp.all_pop(t);
}
int main()
{
	LinkList s;
	s.creat();
	s.display();
	Stack temp;
	change(s,temp);
	return 0;
}
  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值