给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
示例:
给定1->2->3->4
, 你应该返回2->1->4->3
.
说明:
你的算法只能使用常数的额外空间。
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
C
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* swapPairs(struct ListNode* head)
{
if(NULL==head || NULL==head->next)
{
return head;
}
struct ListNode* p1=head;
struct ListNode* p2=head->next;
p1->next=p2->next;
p2->next=p1;
struct ListNode* res=p2;
struct ListNode* last=p1;
while(p1->next && p1->next->next)
{
p1=p1->next;
p2=p1->next;
p1->next=p2->next;
p2->next=p1;
last->next=p2;
last=p1;
}
return res;
}
C++
/**
* 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(NULL==head || NULL==head->next)
{
return head;
}
ListNode* p1=head;
ListNode* p2=head->next;
p1->next=p2->next;
p2->next=p1;
ListNode* res=p2;
ListNode* last=p1;
while(p1->next && p1->next->next)
{
p1=p1->next;
p2=p1->next;
p1->next=p2->next;
p2->next=p1;
last->next=p2;
last=p1;
}
return res;
}
};
python
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def swapPairs(self, head):
"""
:type head: ListNode
:rtype: ListNode
"""
if None==head or None==head.next:
return head
p1=head
p2=head.next
p1.next=p2.next
p2.next=p1
res=p2
last=p1
while p1.next and p1.next.next:
p1=p1.next
p2=p1.next
p1.next=p2.next
p2.next=p1
last.next=p2
last=p1
return res