LeetCode(24)Swap Nodes in Pairs
2420 ワード
タイトルは以下の通りです: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対で、2->1->4->3である.入力要素の個数が奇数で、例えば1->2->3->4->5であれば、出力結果はちょうど最後の要素が2対にならず、2->1->4->3->5である.
コードは以下の通りです:class Solution{public:ListNode*swapPairs(ListNode*head){if(head=NULL||head->next=NULL) return head; ListNode* p=head; ListNode* q=head->next; ListNode* x=head->next->next; ListNode* t=NULL; head=q; while(p!=NULL&&q!=NULL){ q->next=p; p->next=NULL; if(t!=NULL) t->next=q; t=p; p=x; if(x!=NULL) q=x->next; if(q!=NULL) x=q->next; } if(p!=NULL) t->next=p; return head; } };
update:2014-10-17再帰
タイトル分析:入力要素の個数が偶数で、例えば1->2->3->4であれば、出力結果はちょうど2対で、2->1->4->3である.入力要素の個数が奇数で、例えば1->2->3->4->5であれば、出力結果はちょうど最後の要素が2対にならず、2->1->4->3->5である.
コードは以下の通りです:class Solution{public:ListNode*swapPairs(ListNode*head){if(head=NULL||head->next=NULL) return head; ListNode* p=head; ListNode* q=head->next; ListNode* x=head->next->next; ListNode* t=NULL; head=q; while(p!=NULL&&q!=NULL){ q->next=p; p->next=NULL; if(t!=NULL) t->next=q; t=p; p=x; if(x!=NULL) q=x->next; if(q!=NULL) x=q->next; } if(p!=NULL) t->next=p; return head; } };
ListNode *swapPairs(ListNode *head) {
if(head==NULL||head->next==NULL)
return head;
ListNode* p=head;
ListNode* q=head->next;
ListNode* x=head->next->next;
ListNode* t=NULL;
head=q;
while(p!=NULL&&q!=NULL){
q->next=p;
p->next=NULL;
if(t!=NULL)
t->next=q;
t=p;
p=x;
if(x!=NULL)
q=x->next;
if(q!=NULL)
x=q->next;
}
if(p!=NULL)
t->next=p;
return head;
}
update:2014-10-17再帰
/**
* 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* new_head = head->next;
head->next = new_head->next;
new_head->next = head;
new_head->next->next = swapPairs(new_head->next->next);
return new_head;
}
};