leetcode24
Swap Nodes in Pairs
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中,代表上一个,然后在后面的遍历中,将新一对节点的第二个节点接在前一个节点上,然后继续相同操作,具体细节请看代码。/**
* 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) {
if (head == NULL || head->next == NULL)
return head;
ListNode * temp = head, * t, *p = NULL;
head = head->next;
while (temp && temp->next)
{
if (p)
{
p->next = temp->next;
}
t = temp->next->next;
temp->next->next = temp;
temp->next = t;
p = temp;
temp = t;
}
if (temp)
p->next = temp;
return head;
}
};