题目: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和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;
}
};