给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。
自己的方法:首先将前两个节点进行交换,来得到头结点
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
ListNode* swapPairs(ListNode* head) {
ListNode * p =head;
ListNode *q;
ListNode * tem;
if(p && p->next)
{
q= p->next;
p->next = q->next;
q->next =p;
tem =q;
}
else
{
return head;
}
//先将前两个节点交换,获得头结点 temp
while(p && p->next && p->next->next )
{
q= p->next->next;
p->next->next = q->next;
q->next = p->next;
p->next =q;
p= p->next->next;
}
return tem;
}
};
使用虚拟结点
ListNode * dhead = new ListNode(0);
时间复杂度o(n) 空间复杂度o(1)
cpp
```cpp
class Solution {
public:
ListNode* swapPairs(ListNode* head) {
ListNode *dhead = new ListNode(0);//虚拟节点
dhead->next = head;//虚拟结点指向头节点
ListNode *cur=dhead;
ListNode * temp;
ListNode * temp1;
while(cur->next!=NULL&&cur->next->next!=NULL)
{
temp = cur->next;
temp1 = cur->next->next->next;
cur->next = cur->next->next;
cur->next->next=temp;
cur->next->next->next = temp1;
cur=cur->next->next;
}
return dhead->next;
}
};