题意:
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.(Easy)
分析:
链表题,画个图就比较清晰了,就是每两个进行一下翻转,注意翻转部分头尾指针的指向即可,头指针会变,所以用下dummy node。
代码:
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 ListNode dummy(0); 13 dummy.next = head; 14 head = &dummy; 15 while (head -> next != nullptr && head -> next -> next != nullptr) { 16 ListNode* temp1 = head -> next; 17 head -> next = head -> next -> next; 18 ListNode* temp2 = head -> next -> next; 19 head -> next -> next = temp1; 20 temp1 -> next = temp2; 21 head = head -> next -> next; 22 } 23 return dummy.next; 24 } 25 };