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.
第90道题了,这个是每一对节点就进行交换,题目说明不能修改list的值,也就是不能只交换数据。
定义了一个新节点newhead,用于返回,还有一个pre节点记录已经反转后的list的末尾,first节点表示是需要交换的第一个节点,second表示的是需要交换的第二个节点。
大概思路就是先把second的next给first的next,然后second指向first,把second接到pre的后面,用pre记录first,再更新first和second的位置
class Solution {
public:
ListNode* swapPairs(ListNode* head) {
if (!head) return NULL;
ListNode*newhead, *first = head, *second = head->next, *pre = NULL;
newhead = second;
if (!second) return head; //只有一个直接返回head
while (second)//有第二个可以进行交换
{
first->next = second->next;//把second指向的给first指向
second->next = first;//second指向first
if (pre!=NULL)//第一次没有pre
{
pre->next = second;
}
pre = first;//把带处理的第一个接到pre后面
if (first->next)//有带处理的
{
first = first->next;
second = first->next;
}
else
{
return newhead;//后面已经没值了直接返回
}
}
return newhead;
}
};