代码片段

Posted

篇首语:本文由小常识网小编为大家整理,主要介绍了[LeetCode]92. Reverse Linked List II相关的知识,希望对你有一定的参考价值。

92. Reverse Linked List II

Reverse a linked list from position m to n. Do it in-place and in one-pass.

For example:
Given 1->2->3->4->5->NULLm = 2 and n = 4,

return 1->4->3->2->5->NULL.

Note:
Given mn satisfy the following condition:
1 ≤ m ≤ n ≤ length of list.

部分链表反转。

1)链表为空或者一个节点时,返回即可

2)获取链表长度,进行m,n范围检查。

3)head部分保留m节点之前的链表。second保留[m,n]之间的节点,包括m,n两个节点。next保留n节点后的节点。

4)使用**list方便给第一部分的结束结束后置NULL。first是方便第二段链表的处理。

/**  * Definition for singly-linked list.  * struct ListNode {  *     int val;  *     struct ListNode *next;  * };  */ struct ListNode* reverseBetween(struct ListNode* head, int m, int n) {     if ( head == NULL || head->next == NULL )     {         return head;     }          int len = 0;     struct ListNode *pLen = head;     for ( ; pLen; pLen = pLen->next )     {         len++;     }          if ( m < 1 || n > len )     {         return head;     }          struct ListNode *first = head;     struct ListNode **list = &head;     int cnt = 1;     for ( ; cnt < m; cnt++ )     {         list = &(*list)->next;         first = first->next;     }     *list = NULL;          struct ListNode *second = NULL;     struct ListNode *next = NULL;     for ( ; cnt <= n; cnt++ )     {         next = first->next;         first->next = second;         second = first;         first = next;     }          first = head;     while ( first != NULL && first->next != NULL )     {         first = first->next;     }          if ( head != NULL )     {         first->next = second;     }     else     {         head = second;     }          first = head;     while ( first != NULL && first->next != NULL )     {         first = first->next;     }     first->next = next;          return head; }

以上是关于[LeetCode]92. Reverse Linked List II的主要内容,如果未能解决你的问题,请参考以下文章

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人,因此内容不代表本站观点、本站不对文章中的任何观点负责,内容版权归原作者所有、内容只用于提供信息阅读,无任何商业用途。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站(文章、内容、图片、音频、视频)有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至2811500808@qq.com举报,一经查实,本站将立刻删除、维护您的正当权益!