给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。
示例 1:
输入:head = [1,2,3,4]
输出:[2,1,4,3]
示例 2:
输入:head = []
输出:[]
示例 3:
输入:head = [1]
输出:[1]
提示:
链表中节点的数目在范围 [0, 100] 内
0 <= Node.val <= 100
迭代法(当N为链表的节点数时,时间复杂度为O(n),空间复杂度为O(1))
c++实现
class Solution {
public:
ListNode* swapPairs(ListNode* head) {
if(head==NULL||head->next==NULL)
{ return head; }
ListNode *res=new ListNode();
res->next=head;
ListNode *cur=res;
while(cur->next!=NULL&&cur->next->next!=NULL)
{
ListNode *nxt=head->next;
ListNode *temp=head->next->next;
cur->next=nxt;
nxt->next=head;
head->next=temp;
cur=head;
head=head->next;
}
return res->next;
}
};
java实现
class Solution {
public ListNode swapPairs(ListNode head) {
if(head==null||head.next==null)
{ return head; }
ListNode res=new ListNode(0);
res.next=head;
ListNode cur=res;
while(cur.next!=null&&cur.next.next!=null)
{
ListNode nxt=head.next;
ListNode temp=head.next.next;
cur.next=nxt;
nxt.next=head;
head.next=temp;
cur=head;
head=head.next;
}
return res.next;
}
}
python实现
class Solution:
def swapPairs(self, head: ListNode) -> ListNode:
if head==None or head.next==None:
return head
res=ListNode()
res.next=head
cur=res
while cur.next!=None and cur.next.next!=None:
nxt=head.next
tmp=nxt.next
cur.next=nxt
nxt.next=head
head.next=tmp
cur=head
head=head.next
return res.next
递归法(当N为链表的节点数时,时间复杂度为O(n),空间复杂度为O(n))
c++实现
class Solution {
public:
ListNode* swapPairs(ListNode* head) {
if(head==NULL||head->next==NULL)
{ return head; }
ListNode *nxt=head->next;
head->next=swapPairs(head->next->next);
nxt->next=head;
return nxt; //以1->2->3->4为例的话,最内层递归return的是4,外面那层return的是2
}
};
java实现
class Solution {
public ListNode swapPairs(ListNode head) {
if(head==null||head.next==null)
{ return head; }
ListNode nxt=head.next;
head.next=swapPairs(head.next.next);
nxt.next=head;
return nxt; //以1->2->3->4为例的话,最内层递归return 4,外面那层return 2
}
}
python实现
class Solution:
def swapPairs(self, head: ListNode) -> ListNode:
if head==None or head.next==None:
return head
nxt=head.next
head.next=self.swapPairs(head.next.next)
nxt.next=head
return nxt