leetcode-剑指offer刷题

leetcode-剑指offer刷题

逆序打印链表

逆序打印链表,想实现逆序,很容易想到栈这个数据结构,栈的先进后出特性可以实现逆序。
在这里插入图片描述
首先初始化stack、用于输出的vector、当前指针cur

	vector<int> res;
	//辅助栈,用于逆序
	stack<int> tmp;
	ListNode* cur = head;

通过循环先将链表中的元素依次存入栈中
在这里插入图片描述

	//依次将链表元素加入栈中
	while (cur != NULL)
	{
		tmp.push(cur->val);
		cur = cur->next;
	}

再将元素从栈中弹出,存入vector实现逆序

	//将栈中元素存入vector中
	while (!tmp.empty())
	{
		res.push_back(tmp.top());
		tmp.pop();
	}

反转链表

输入链表 1->2->3->4
输出链表 4->3->2->1

此题采用双指针的方法,首先初始化两个指针 cur->head, pre->null分别指向链表的头节点与尾节点。
再初始化一个 临时节点tmp用于记录cur的下一个节点
在这里插入图片描述

ListNode* cur = head, * pre = nullptr, * tmp;

开始循环遍历,终止条件为 cur = NULL
cur用于指向当前遍历的节点,pre用于指向反转后的链表的前节点。
初始化后,首先用tmp记录cur->next,如果不先记录cur->next,则当断开cur->next后,就丢失了下一个节点的位置。

tmp = cur->next;

在这里插入图片描述
再将cur.next断开,并改为指向pre,此时第一个节点变成最后一个节点,实现反转。

cur->next = pre;

在这里插入图片描述
pre指针向 移动,指向此时的cur

pre = cur;

由于tmp记录的是cur的后节点,这时发挥作用,将cur指向tmp,实现向前移动

cur = tmp;

在这里插入图片描述
下一步再跳至循环开始,用tmp记录cur->next

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值