【剑指offer专项】21-25链表刷题(链表的环境搭建问题)

概述

leetcod上刷链表题时,如果你需要调试的话,在leetcod上很不方便,使用cout来看结果也不是一个好办法,特别是对于递归这种算法,不一步一步的调试很难搞懂。这时候就需要在本地的VS中调试,但是你需要手搭一些环境,比如说链表的创建,环链表的创建,以及链表的显示,有些时候这个东西很繁琐甚至比题目还难。下面给出我的环境搭建代码方便大家参考,这样就直接可以再VS中输入输出了。当然我也问了一些大佬,他们建议还是leetcod上在线做题,实在搞不懂了可以这样本地调试。

C++在VS就leetcod链表题的环境搭建

为了方便,这是写在一个头文件中的 ,也可以直接复制到cpp文件中。

#pragma once
#include<iostream>
using namespace std;

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


//单链表创建
ListNode* LinkList(int nums[],int n) {
	
	ListNode *L=new ListNode;//创建头结点
	ListNode *r = L;//动态尾节点


	for (int i = 0; i < n; i++)
	{
		ListNode* p = new ListNode;
		p->val = nums[i];
		r->next = p;
		r = p;
	}
	r->next = NULL;     //表示当前链表结束
	return L->next;//返回无头结点的链表
	//return L;//返回有头结点的链表
}


//环 单链表创建  n=0创建空链表  pos为指定入环节点
ListNode* cLinkList(int nums[], int n, int pos) {
	ListNode *L = new ListNode;//创建头结点
	ListNode *r = L;//动态尾节点
	ListNode * c=NULL;//定义入环节点,暂时让其为空

	//ListNode * p, q;
	//p = L;

	for (int i = 0; i < n; i++)
	{
		ListNode* p = new ListNode;
		p->val = nums[i];
		r->next = p;
		r = p;
		if (i==pos) c = p;//记录入环节点的位置
	}

	r->next = c;//尾节点指针指向入环节点
	return L->next;//返回无头结点的链表
	//return L;//返回有头结点的链表
}


//链表显示函数
void display(ListNode*L) {
	ListNode* temp = L;
	int e;
	cout << "该链表的遍历依次为:";
	while (temp != NULL)
	{
		e = temp->val;
		cout << e << " ";
		temp = temp->next;
	}
	cout << endl;
}

然后是23题中一个双链表有交点的创建方法。本人是用vector容器存储的,因为需要输出2个链表。

vector<listnode*> couplelinklist(int numsa[], int skipa, int na, int numsb[], int skipb) {

	listnode *la = new listnode;//创建a的头结点
	listnode *ra = la;//动态尾节点
	listnode * c = null;//定义相交节点,暂时让其为空

	for (int i = 0; i < na; i++)//a链创建
	{
		listnode* p = new listnode;
		p->val = numsa[i];
		ra->next = p;
		ra = p;
		if (i == skipa)c = p;//记录相交节点
	}
	ra->next = null;     //表示当前链表结束
	
	listnode *lb = new listnode;//创建b的头结点
	listnode *rb = lb;//动态尾节点
	for (int i = 0; i < skipb+1; i++)//b链创建
	{
		listnode* p = new listnode;
		p->val = numsb[i];
		rb->next = p;
		rb = p;
	}
	ra->next = c;

	vector<listnode*> listab;
	listab.push_back(la->next);
	listab.push_back(lb->next);
	return listab;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值