博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
链表-Reverse Linked List II
阅读量:5058 次
发布时间:2019-06-12

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

【题目要求直接翻转链表,而非申请新的空间】

这道题的一个关键在于,当m=1时,需要翻转的链表段前没有其他的结点(leetcode的测试用例不含头结点),这个特例给解题带来了一点小小的困难。一个比较直观、比较方便的想法是在链表中插入一个头结点,这样处理起来方便很多。除此之外,还要注意各种循环边界条件的设置。

/** * Definition for singly-linked list. * struct ListNode { *     int val; *     struct ListNode *next; * }; */struct ListNode* reverseBetween(struct ListNode* head, int m, int n) {    struct ListNode * pre=(struct ListNode *)malloc(sizeof(struct ListNode));    pre->next=head;    head=pre;   //插入一个头结点    struct ListNode * begin;    int i=0;    while(i
next; i++; } begin=pre->next; for(i=m;i
next; begin->next=p->next; p->next=pre->next; pre->next=p; } return head->next; }

在leetcode上看到一个很简洁的代码,基本思路大致相同灵活地运用了指针,无需添加头结点,膜拜!

ListNode* reverseBetween(ListNode* head, int m, int n) {    ListNode **pre = &head;  //pre中存储head指针的地址    int steps = m;    while (--steps) { pre = &(*pre)->next;}    ListNode *cur = *pre;  //指向翻转链表的第一个结点    for (int i = m; i < n; i++) {        ListNode *next_n = cur->next;        cur->next = next_n->next;        next_n->next = *pre;        *pre = next_n;    }    return head; }

 

转载于:https://www.cnblogs.com/summerkiki/p/5263828.html

你可能感兴趣的文章
用qq电脑管家解决他人磳网
查看>>
HashMap使用
查看>>
programming language part b 第一周作业
查看>>
OFbiz--简单介绍
查看>>
输入10个数,求出最大元素是第几个数(数组作为函数參数)
查看>>
百度和谷歌仍有差距
查看>>
部分 CM11 系统 Android 平板执行植物大战僵尸 2 黑屏的解决的方法
查看>>
[ACM] HDU 5025 Saving Tang Monk (状态压缩,BFS)
查看>>
ubuntu-利用pdnsd-TCP方式获取IP-拒绝DNS污染
查看>>
SoapUI 测试接口演示
查看>>
SQL Server远程连接(2)
查看>>
接口interface
查看>>
lr http_post请求webservice
查看>>
HDU - 1150 POJ - 1325 Machine Schedule 匈牙利算法(最小点覆盖)
查看>>
IE webkit 滚动条样式!
查看>>
ASP.NET中UpdatePanel内控件的JS失效的问题
查看>>
python learning Process and Thread.py
查看>>
Bootstrap 容器(Container)及网格说明-(二)
查看>>
SVN服务器的搭建(二)
查看>>
ubuntu中Apache 虚拟主机的配置
查看>>