博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
力扣算法题—092反转链表2
阅读量:6275 次
发布时间:2019-06-22

本文共 2409 字,大约阅读时间需要 8 分钟。

反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。

说明:

1 ≤ m ≤ n ≤ 链表长度。

示例:

输入: 1->2->3->4->5->NULL, m = 2, n = 4输出: 1->4->3->2->5->NULL
1 #include "_000库函数.h" 2  3  4 struct ListNode { 5     int val; 6     ListNode *next; 7     ListNode(int x) : val(x), next(NULL) {} 8 }; 9 10 11 //只能扫描一遍12 //将中间要反转的数取出来在放入链表中13 class Solution {14 public:15     ListNode* reverseBetween(ListNode* head, int m, int n) {16         if (!head || m <= 0 || n <= 0 || n <= m)return head;17         //加头18         ListNode*p = new ListNode(-1);19         p->next = head;20         head = p;21 22         stack
s;23 ListNode*pre = new ListNode(0);24 while (p && n >0) {25 --m;26 if (m == 0)pre = p; 27 p = p->next;28 if (p && m <= 0)29 s.push(p->val);30 --n;31 }32 if (p == NULL)return head->next;//m,n超过了链表长度33 pre->next = p->next;34 while (!s.empty()) {35 ListNode*q = new ListNode(0);36 q->val = s.top();37 q->next = pre->next; 38 pre->next = q;39 pre = q;40 s.pop();41 }42 return head->next;43 }44 };45 46 //走一步反转一个数据47 //不用对m,n的大小进行判断48 class Solution {49 public:50 ListNode *reverseBetween(ListNode *head, int m, int n) {51 ListNode *dummy = new ListNode(-1), *pre = dummy;52 dummy->next = head;53 for (int i = 0; i < m - 1; ++i) pre = pre->next;54 ListNode *cur = pre->next;55 for (int i = m; i < n; ++i) {
//用交换法56 ListNode *t = cur->next;57 cur->next = t->next;58 t->next = pre->next;59 pre->next = t;60 }61 return dummy->next;62 }63 };64 65 66 void T092() {67 Solution s;68 vector
v;69 ListNode *head = new ListNode(0);70 ListNode *p = head;71 v = { 1,2,3,4,5 };72 for (auto a : v) {73 ListNode *q = new ListNode(0);74 q->val = a;75 p->next = q;76 p = q;77 }78 p = head->next;79 while (p) {80 cout << p->val << "->";81 p = p->next;82 }83 cout << endl;84 85 86 p = s.reverseBetween(head->next, 2, 6);87 while (p) {88 cout << p->val << "->";89 p = p->next;90 }91 cout << endl;92 }

 

转载于:https://www.cnblogs.com/zzw1024/p/10774806.html

你可能感兴趣的文章
mouseout、mouseover和mouseleave、mouseenter区别
查看>>
一句话命令
查看>>
TCP/IP
查看>>
redhat之root密码破解
查看>>
如何为xshell终端设置超时
查看>>
几点Java程序必须满足的基本规则
查看>>
开源数据库Sharding技术
查看>>
mysql用户管理、常用sql语句、mysql数据库备份恢复
查看>>
linux 下route命令
查看>>
关于exchange 2010在单林多域环境中创建邮箱问题
查看>>
常用的正则表达式
查看>>
delphi 操作文件
查看>>
AWS RDS多可用区+EC2实例跑mysql从库的测试
查看>>
oracle经典书籍推荐
查看>>
OCI,runC,containerd 是什么?(部分转载)
查看>>
FFmpeg Reinit context to 1920x1088问题描述
查看>>
基于 HTML5 Canvas 的 3D 压力器反序列化
查看>>
js获取select标签选中的值
查看>>
LeetCode021 Merge Two Sorted Listss C语言
查看>>
DOM(一)——HTML DOM
查看>>