Given a linked list, swap every two adjacent nodes and return its head.
You may not modify the values in the list's nodes, only nodes itself may be changed.
Example:
Given 1->2->3->4, you should return the list as 2->1->4->3.
分析
这个题目是要调换每两个node的位置,但是又不能更改每个node的value。题目难度不大,但是重点在于要注意各种边界条件。
为了代码的简单,我们创建一个tmpHead节点,tmpHead->next = head。
tmpHead | n1 | n2 | n3 | n4 |
p | p1 | p2 | ||
p | p1 | p2 |
使用三个临时指针遍历整个链表,p,p1,p2,这样的话就可以轻易的将两个翻转。
Code
class Solution {
public:
ListNode* swapPairs(ListNode* head) {
if(!head) return head;
ListNode* tmpHead = new ListNode(0);
tmpHead->next = head;
ListNode* p = tmpHead;
ListNode* p1 = tmpHead->next;
ListNode* p2;
while (p && p1 && p1->next)
{
p2 = p1->next;
p1->next = p2->next;
p2->next = p1;
p -> next = p2;
p = p1;
p1 = p->next;
}
return tmpHead->next;
}
};
运行效率
Runtime: 4 ms, faster than 100.00% of C++ online submissions for Swap Nodes in Pairs.
Memory Usage: 9 MB, less than 16.15% of C++ online submissions forSwap Nodes in Pairs.