本文主要是介绍leetcode 143 Reorder List 单链表,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Given a singly linked list L: L0→L1→…→Ln-1→Ln,
reorder it to: L0→Ln→L1→Ln-1→L2→Ln-2→…
You must do this in-place without altering the nodes' values.
For example,
Given {1,2,3,4}
, reorder it to {1,4,2,3}
.
/*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode(int x) : val(x), next(NULL) {}* };*/
class Solution {public:ListNode* reverse(ListNode* head) {ListNode* prev = NULL, *cur = head, *next = NULL;while (cur != NULL) {next = cur->next;cur->next = prev;prev = cur;cur = next;}return prev;}void reorderList(ListNode *head) {if (head == NULL || head->next == NULL || head->next->next == NULL)return;ListNode *slow = head, *fast = head;while (fast != NULL && fast->next != NULL && fast->next->next != NULL) {slow = slow->next;fast = fast->next->next;}ListNode *l2 = reverse(slow->next), *l1 = head, *l1next = NULL, *l2next = NULL;slow->next = NULL;while (l2 != NULL) {l1next = l1->next;l1->next = l2;l2next = l2->next;l2->next = l1next;l1 = l1next;l2 = l2next;}}};
Reverse the second half string.
这篇关于leetcode 143 Reorder List 单链表的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!