【LeetCode】24. Swap Nodes in Pairs (3 solutions)
2014-12-19 16:10
330 查看
Swap Nodes in Pairs
Given a linked list, swap every two adjacent nodes and return its head.
For example,
Given
Your algorithm should use only constant space. You may not modify the values in the list, only nodes itself can be changed.
解法一:递归
解法二:Reverse Nodes in k-Group令k=2
解法三:
每两个节点成对交换次序后,返回给前一个结点进行连接。
Given a linked list, swap every two adjacent nodes and return its head.
For example,
Given
1->2->3->4, you should return the list as
2->1->4->3.
Your algorithm should use only constant space. You may not modify the values in the list, only nodes itself can be changed.
解法一:递归
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: ListNode *swapPairs(ListNode *head) { if(head == NULL || head->next == NULL) return head; ListNode* newhead = head->next; head->next = swapPairs(newhead->next); newhead->next = head; return newhead; } };
解法二:Reverse Nodes in k-Group令k=2
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: ListNode *swapPairs(ListNode *head) { return reverseKGroup(head,2); } ListNode *reverseKGroup(ListNode *head, int k) { ListNode* newhead = new ListNode(-1); ListNode* tail = newhead; ListNode* begin = head; ListNode* end = begin; while(true) { int count = k; while(count && end != NULL) { end = end->next; count --; } if(count == 0) {//reverse from [begin, end) stack<ListNode*> s; while(begin != end) { s.push(begin); begin = begin->next; } while(!s.empty()) { ListNode* top = s.top(); s.pop(); tail->next = top; tail = tail->next; } } else {//leave out tail->next = begin; break; } } return newhead->next; } };
解法三:
每两个节点成对交换次序后,返回给前一个结点进行连接。
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: ListNode *swapPairs(ListNode *head) { ListNode* newhead = new ListNode(-1); newhead->next = head; ListNode* tail = newhead; while(tail->next != NULL && tail->next->next != NULL) { ListNode* A = tail->next; ListNode* B = A->next; //swap A->next = B->next; B->next = A; tail->next = B; tail = tail->next->next; } return newhead->next; } };
相关文章推荐
- LeetCode24. Swap Nodes in Pairs简单到一次性通过
- LeetCode 24. Swap Nodes in Pairs
- leetcode 24. Swap Nodes in Pairs
- leetCode 24. Swap Nodes in Pairs (双数交换节点) 解题思路和方法
- LeetCode 24. Swap Nodes in Pairs(交换节点)
- [leetcode] 24. Swap Nodes in Pairs 解题报告
- leetcode 24. Swap Nodes in Pairs
- LeetCode 24. Swap Nodes in Pairs
- (Java)LeetCode-24. Swap Nodes in Pairs
- leetcode_24. Swap Nodes in Pairs C++
- leetcode 24. Swap Nodes in Pairs
- LeetCode 24. Swap Nodes in Pairs
- **LeetCode 24. Swap Nodes in Pairs
- 【leetcode】24. Swap Nodes in Pairs
- leetcode 24. Swap Nodes in Pairs
- 【leetcode】24. Swap Nodes in Pairs
- LeetCode 24. Swap Nodes in Pairs
- LeetCode *** 24. Swap Nodes in Pairs
- leetcode 24. Swap Nodes in Pairs
- [leetcode] 【链表】24. Swap Nodes in Pairs