LeetCode 92 ——反转链表 II
生活随笔
收集整理的這篇文章主要介紹了
LeetCode 92 ——反转链表 II
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1. 題目
2. 解答
我們需要先找到第 m 個結點及其上一個結點,然后將從 m 到 n 的結點進行反轉,最后依次將 m 到 n 反轉后的結點和 n 之后的結點放入原鏈表中即可。
從前往后依次遍歷 m-1 次即可找到第 m 個結點,然后我們開始將第 m 到第 n 個結點倒序放入一個新鏈表,也即每次都在新鏈表的頭結點后面進行插入,來實現這部分子鏈表的反轉。
最后,我們將這個反轉后的子鏈表放入原鏈表,再把第 n 個結點后面的鏈表也放回到原鏈表即可。
/*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode(int x) : val(x), next(NULL) {}* };*/ class Solution { public:ListNode* reverseBetween(ListNode* head, int m, int n) {if (head == NULL || head->next == NULL || m == n) return head;// 先找到第 m 個結點和其前一結點// 如果 m == 1,則沒有 m 的前一結點,需要特殊處理ListNode *temp = head;int num = 1;ListNode *m_last_node = NULL;while (num < m) {m_last_node = temp;temp = temp->next;num++;}ListNode *m_node = temp;// 把第 m 到 n 個結點倒序加入新鏈表中,反轉鏈表// 即每次都在頭結點之后插入結點,類似于隊列,先進的在后面ListNode *queue = new ListNode(0);ListNode *reversed_node = NULL;while (num <= n){reversed_node = temp;temp = temp->next;reversed_node->next = queue->next;queue->next = reversed_node;num++;}// 將 m 到 n 反轉后的結點放入原鏈表中if (m != 1) m_last_node->next = queue->next;else head = queue->next;// 將 n 后面的結點放入原鏈表中m_node->next = temp;return head;} };獲取更多精彩,請關注「seniusen」!
轉載于:https://www.cnblogs.com/seniusen/p/9958597.html
總結
以上是生活随笔為你收集整理的LeetCode 92 ——反转链表 II的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux面试题-基础题1
- 下一篇: spring-data-mongodb与