Leetcode Swap Nodes in Pairs

OpenSoucre發表於2014-03-28

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.

主要考查連結串列的基本操作,特別注意連結串列為空或者只有一個連結串列節點的情況

#include <iostream>
#include <algorithm>

using namespace std;
struct ListNode{
    int val;
    ListNode *next;
    ListNode(int x) : val(x), next(NULL){}
};
void printListNode(ListNode *head){
  static int cnt = 1;
   ListNode *p= head;
   cout<<"("<<cnt++<<")";
   while(p){
      cout<< p->val<<"->";
      p = p->next;
  }
cout<<endl;
}

ListNode *swapPairs(ListNode *head){

    if(head == NULL || head->next == NULL) return head;
    ListNode *q = head,*p = head->next;
    head = NULL;
    q -> next = p->next;
    p -> next = q;
    head = p;
    ListNode *pre = NULL;
    while(q->next && q->next->next){
        pre = q;
        p = p->next->next;
        q = q->next->next;
        p->next = q ->next;
        q->next = p;
        pre->next = q;
        p = pre->next;
        q = p -> next;
    }
    return head;
}

 

相關文章