链表中常见问题

常见的链表题有:
1.翻转单向链表 LeetCode 第206
2.判断一个链表是否是回文结构 LeetCode第234题
3.将单向链表按某值划分成左边小,中间相等,右边大的形式
4.复制含有随机指针结点的链表 LeetCode 剑指offer 35
5.两个链表相交问题(存在环) 不存在环的版本为LeetCode 第160(面试题)
6.删除链表中倒数第N个结点

#include<iostream>
#include<list>
#include<stack>
#include<unordered_map>
using namespace std;
struct ListNode {
   
	int val;
	ListNode *next;
	ListNode* random;
	ListNode() : val(0), next(nullptr) {
   }
	ListNode(int x) : val(x), next(nullptr) {
   }
	ListNode(int x, ListNode *next) : val(x), next(next) {
   }
};

//1.翻转单向链表                                            LeetCode  第206
//2.判断一个链表是否是回文结构                              LeetCode第234题
//3.将单向链表按某值划分成左边小,中间相等,右边大的形式
//4.复制含有随机指针结点的链表                              LeetCode 剑指offer 35
//5.两个链表相交问题(存在环),,不存在环的版本为LeetCode 第160(面试题)
//6.删除链表的倒数第N个结点

//1.翻转单向链表                                            LeetCode  第206
ListNode* reverseList(ListNode* head)
{
   
	ListNode*prev = nullptr;
	while (head != nullptr)
	{
   
		ListNode*next = head->next;
		head->next = prev;
		prev = head;
		head = next;
	}
	return prev;
	
}
//2.判断一个链表是否是回文结构                              LeetCode第234题
//利用栈进行判断空间复杂度为O(N),利用快慢指针可以降低空间复杂度
//利用栈
bool isPalindrome(ListNode* head)
{
   
	ListNode*curr = head;
	stack<int>stc;
	while (curr != NULL)
	{
   
		stc.push(curr->val);
		curr = curr->next;
	}
	while (head != NULL)
	{
   
		if (head->val = stc.top)
		{
   
			return false;
		}
		stc.pop();
		head = head->next;
	}
	return true;
}
//利用快慢指针
bool isPalindrome(ListNode* head)
{
   
	ListNode*p1 = head;
	ListNode*p2 = head;
	while (p2->next != NULL&&p2->next->next != NULL)
	{
   
		p1 = p1->next;
		p2 = p2->next->next;
	}
	p2 = p1->next;
	p1->next = NULL
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值