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; }