题目:Given a linked list, swap every two adjacent nodes and return its head.
For example,
Given1->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和q表示当前待交换的两个节点。o代表了前一个节点。r表示后一个节点。
代码:
/**
* 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) { ListNode *Head = new ListNode(-1); Head -> next = head; ListNode *o = Head; ListNode *p = Head -> next; while(p != NULL) { ListNode *q = p -> next; if(q != NULL) { ListNode *r = q -> next; o -> next = q; q -> next = p; p -> next = r; o = o -> next -> next; } p = p -> next; } p = Head -> next; delete Head; return p; }};