lintcode-451-两两交换链表中的节点
451-两两交换链表中的节点
给一个链表,两两交换其中的节点,然后返回交换后的链表。
样例
给出 1->2->3->4, 你应该返回的链表是 2->1->4->3。
挑战
你的算法只能使用常数的额外空间,并且不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
标签
链表
思路
两两交换结点
code
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
/*
* @param head: a ListNode
* @return: a ListNode
*/
ListNode * swapPairs(ListNode * head) {
// write your code here
if (head == NULL || head->next == NULL) {
return head;
}
ListNode * newHead = new ListNode(0);
newHead->next = head;
ListNode * temp = head, *p = newHead, *q = temp->next;
while (temp != NULL && temp->next != NULL) {
temp->next = q->next;
q->next = temp;
p->next = q;
if (temp->next != NULL && temp->next->next != NULL) {
p = temp;
temp = temp->next;
q = temp->next;
}
else {
break;
}
}
return newHead->next;
}
};