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.
链表神马的完全是我的克星啊。没有算法,好好画图,考虑p->next != NULL时一定要先考虑一下p!=NULL!!!!!!!!
1 /** 2 * Definition for singly-linked list. 3 * struct ListNode { 4 * int val; 5 * ListNode *next; 6 * ListNode(int x) : val(x), next(NULL) {} 7 * }; 8 */ 9 class Solution { 10 public: 11 ListNode *swapPairs(ListNode *head) { 12 if (head == NULL) return head; 13 ListNode *h = new ListNode(-1), *pre = h, *cur = head; 14 pre->next = head; 15 ListNode *tmp; 16 while (cur != NULL && cur->next != NULL) { 17 tmp = cur->next; 18 pre->next = tmp; 19 cur->next = tmp->next; 20 tmp->next = cur; 21 pre = cur; 22 cur = cur->next; 23 } 24 return h->next; 25 } 26 };