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.
给定一个单链表,调换每两个结点间的顺序并返回它的头部。例如:
给定1->2->3->4,你应当返回2->1->4->3。
你的算法应该只使用常数级的内存,并且不能修改结点的值,只能修改结点本身。
没啥难度,虽然耗时是3ms,但是觉得自己写的代码太丑了。。。上讨论版里复制了另一份3ms的过来,凑合看吧。
/**
* 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) return NULL;
ListNode* new_head=head;
if(head->next) new_head=head->next;
while(head->next) {
ListNode* temp=head->next;
head->next=temp->next;
temp->next=head;
if(!head->next||!head->next->next) break;
temp=head;
head=head->next;
temp->next=head->next;
}
return new_head;
}
};
别人的:
ListNode* swapPairs(ListNode* head) {
if (head && head->next) {
ListNode *nextpair = head->next->next;
head->next->next = head;
head = head->next;
head->next->next = swapPairs(nextpair);
}
return head;
}