当前位置: 首页 > news >正文

每日OJ_牛客_反转部分单向链表

目录

牛客_反转部分单向链表

解析代码


牛客_反转部分单向链表

反转部分单向链表__牛客网

题目给的代码‘:

#include <iostream>
using namespace std;
struct Node {int val;struct Node* next;
};
Node* input_List() {int n,val;Node* phead=new Node();Node* pcur=phead;cin>>n;for(int i=1;i<=n;i++) {cin>>val;if(i==1) {pcur->val=val;pcur->next=nullptr;}else {Node* new_pNode=new Node();new_pNode->val=val;new_pNode->next=nullptr;pcur->next=new_pNode;pcur=new_pNode;}}return phead;
}
Node* reversePart(Node* head,int L,int R) {// 在下面完成代码
}
int main() {Node* phead=input_List();int L,R;cin>>L>>R;Node* new_phead=reversePart(phead,L,R);while(new_phead!=nullptr) {cout<<new_phead->val<<" ";new_phead=new_phead->next;}cout<<endl;return 0;
}

解析代码

可以用双指针解决,但假设需要反转的链表部分,占比比较大,则需要两次遍历链表来实现。

  1. 遍历确定反转链表的起始位置
  2. 遍历链表进行反转

那是不是可以考虑一次遍历链表就解决该问题? 可以采用头插的方式一次遍历解决问题、

题解及函数代码:

Node* reversePart(Node* head, int L, int R) {// 在下面完成代码Node* pHead = new Node;pHead->next = head;Node* prevNode = pHead;for (int i = 0; i < L - 1; i++) // 找到左结点的前一个{prevNode = prevNode->next;}Node* cur = prevNode->next;for (int i = 0; i < R - L; ++i) // R - L 次头插{Node* nextNode = cur->next;cur->next = nextNode->next;nextNode->next = prevNode->next;prevNode->next = nextNode;}Node* list = pHead->next;free(pHead);return list;
}

http://www.mrgr.cn/news/1846.html

相关文章:

  • 二叉树详解(1)
  • [星瞳科技]OpenMV有哪些合适的配件?
  • 【网络】UDP和TCP之间的差别和回显服务器
  • VSCode插件离线安装
  • 负载均衡详解
  • SDK游戏盾有什么作用?APP被攻击使用游戏盾SDK如何防护?
  • Spring Security之登录跳转
  • 【1.0】vue3的创建
  • LMA——基于 LM 的游戏和挑战代理架构探索
  • 设计模式-中介者模式
  • Monaco Editor组件使用详解
  • 记录一次搭建uniapp-vue3的基础项目
  • HCIE冲刺-----------论述解析
  • 【音视频 | YUV格式】深入理解 YUV 数据格式,一文弄懂
  • 双向链表复习(C语言版)
  • Kotlin 语法
  • PHP正则替换字符串中的图片地址
  • 聊聊适配器模式
  • C++求职LinuxWebServer面试篇(项目介绍)
  • WebGL 入门:开启三维网页图形的新篇章(上)