leetcod上刷链表题时,如果你需要调试的话,在leetcod上很不方便,使用cout来看结果也不是一个好办法,特别是对于递归这种算法,不一步一步的调试很难搞懂。这时候就需要在本地的VS中调试,但是你需要手搭一些环境,比如说链表的创建,环链表的创建,以及链表的显示,有些时候这个东西很繁琐甚至比题目还难。下面给出我的环境搭建代码方便大家参考,这样就直接可以再VS中输入输出了。当然我也问了一些大佬,他们建议还是leetcod上在线做题,实在搞不懂了可以这样本地调试。
C++在VS就leetcod链表题的环境搭建为了方便,这是写在一个头文件中的 ,也可以直接复制到cpp文件中。
#pragma once #includeusing 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个链表。
vectorcouplelinklist(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 listab; listab.push_back(la->next); listab.push_back(lb->next); return listab; }



