求c程序反转链表
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求c程序反转链表相关的知识,希望对你有一定的参考价值。
如题,越具体越好
原理很简单 写个循环 1.三个链表指针变量 (前一个(初始0),当前的(初始head),后一个(初始为0))2.写一个循环while(当前的不为空) 3把后一个设置成当前的next4.把当前的next改成前一个5把前一个改成当前的6.把当前的改成后一个 比较基本的数据结构算法#include "stdafx.h"typedef struct LinkTableLinkTable * Next;
int data;
lt,*plt;
void _print(plt phead);
plt reP(plt phead);int _tmain(int argc, _TCHAR* argv[])
plt p=NULL;
plt phead;for(int i=0;i<10;i++)
if(!p)
p=new lt;
p->data=i;
phead=p;
i++;
p->Next=new lt;
p=p->Next;
p->data=i;
p->Next=NULL;
_print(phead);phead=reP(phead);
_print(phead);
getchar();
return 0;
plt reP(plt phead)
plt pr=0;
plt pn=0;
plt pc=phead;
while(pc!=0)
pn=pc->Next;
pc->Next=pr;
pr=pc;
pc=pn;
return pr;
void _print(plt phead)
plt p=phead;
while(p!=0)
printf("%d \\n",p->data);
p=p->Next;
printf("phead %d \\n",phead->data);
参考技术A 给你个思路吧:先求得链表的大小,建一个相同大小的数组,遍历链表,将其值保存到数组中(正序),让后在遍历一次链表,从数组末尾开始对链表赋值(逆序)。 参考技术B 我也给个思路吧,多设两个结构体指针变量sp1(存储上一个结点指针),sp2(存储下一个结点指针),把现在所在的结点的next指针赋值给sp2,然后把sp1赋值给next,把sp2再赋值给sp1,然后取得sp2的指针进入下一个结点,重复这个过程
注意:在初始的时候sp1和sp2都为NULL
2021春季每日一题 week1 未完结
目录
92. 反转链表 II【难度: 中 / 知识点: 链表】
/**
* Definition for singly-linked list.
* 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) {}
* };
*/
class Solution {
public:
ListNode* reverseBetween(ListNode* head, int left, int right)
{
ListNode* p=new ListNode(-1); p->next=head;
ListNode* ans=p;
for(int i=0;i<left-1;i++) p=p->next;
auto a=p->next,b=a->next;
for(int i=0;i<right-left;i++)
{
auto temp=b->next;
b->next=a;
a=b;
b=temp;
}
p->next->next=b;
p->next=a;
return ans->next;
}
};
35. 反转链表【难度: 中 / 知识点: 链表】
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* reverseList(ListNode* head) {
ListNode *ans=nullptr;
while(head)
{
auto temp=head->next;
head->next=ans;
ans=head;
head=temp;
}
return ans;
}
};
1603. 设计停车系统 【难度: 简单 / 知识点: 模拟】
class ParkingSystem {
public:
vector<int> cnt;
ParkingSystem(int big, int medium, int small)
{
cnt={big,medium,small};
}
bool addCar(int carType) {
int t=carType-1;
if(cnt[t]>=1)
{
cnt[t]--;
return true;
}
return false;
}
};
/**
* Your ParkingSystem object will be instantiated and called as such:
* ParkingSystem* obj = new ParkingSystem(big, medium, small);
* bool param_1 = obj->addCar(carType);
*/
3267. 小明上学【难度: 简单 / 知识点: 模拟】
#include<bits/stdc++.h>
using namespace std;
int main(void)
{
int r,y,g; cin>>r>>y>>g;
int n; cin>>n;
int sum=0;
while(n--)
{
int k,s; cin>>k>>s;
if(k==3) continue;
else if(k==1) sum+=s;
else if(k==2) sum+=r+s;
else sum+=s;
}
cout<<sum<<endl;
return 0;
}
150. 逆波兰表达式求值【未完成】
3302. 表达式求值【未完成】
73. 矩阵置零 【难度: 一般 / 知识点: 思维 】
class Solution {
public:
void setZeroes(vector<vector<int>>& ve)
{
map<int,int>mp1,mp2;
for(int i=0;i<ve.size();i++)
{
for(int j=0;j<ve[i].size();j++)
{
if(!ve[i][j]) mp1[i]++,mp2[j]++;
}
}
for(int i=0;i<ve.size();i++)
{
for(int j=0;j<ve[i].size();j++)
{
if(mp1[i]||mp2[j]) ve[i][j]=0;
}
}
}
};
3174. 旋转【难度:简单 / 知识点: 找规律】
#include<bits/stdc++.h>
using namespace std;
const int N=1e2+10;
int a[N][N],b[N][N],n,m;
int main(void)
{
cin>>n>>m;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
cin>>a[i][j];
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++) b[j][n-i+1]=a[i][j];
for(int i=1;i<=m;i++)
{
for(int j=1;j<=n;j++) cout<<b[i][j]<<" ";
cout<<endl;
}
return 0;
}
以上是关于求c程序反转链表的主要内容,如果未能解决你的问题,请参考以下文章