链表内指定区间反转 |
您所在的位置:网站首页 › 链表内指定区间反转go › 链表内指定区间反转 |
题目:
将一个节点数为 size 链表 m 位置到 n 位置之间的区间反转,要求时间复杂度 O(n),空间复杂度 O(1)。 例如: 给出的链表为 1→2→3→4→5→NULL,m=2,n=4 返回 1→4→3→2→5→NULL 数据范围: 链表长度 0< size ≤1000,0= n || NULL == head) return head; struct ListNode* rHead = head; struct ListNode* rTail = NULL; for (int i = 1; NULL != head && i < m; ++i) { //找到rTail和需要翻转的head rTail = head; head = head->next; } if (NULL == rTail) { //第一个就需要翻转 rHead = NULL; rTail = NULL; } struct ListNode* mHead = NULL; struct ListNode* mTail = NULL; struct ListNode* mp = NULL; for (int i = m; NULL != head && i next; mp->next = mHead; mHead = mp; if (NULL == mTail) { mTail = mp; } } if (NULL != rTail) { //拼接m之前的连接 rTail->next = mHead; } if (NULL != mTail) { //拼接n后面的链表 mTail->next = head; } if (NULL == rHead) { //如果从第一个开始翻转 rHead = mHead; } return rHead; } 运行结果: |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |