题目描述如下:
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
示例:
给定1->2->3->4
, 你应该返回2->1->4->3
.
这道题有很多种思路,我用的思路是将链表按照要求分成两个链表,最后合并在一起,如题head:1->2->3->4k,可以分成head1:1->3,head2:2->4,之后在把head2和head1合并成一条。
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) {
ListNode *head1=new ListNode(0),*head2=new ListNode(0);
ListNode *temp1=head1,*temp2=head2;
if(head==NULL){return head;}
else if(head->next==NULL){return head;}
while(head!=NULL){
temp1->next = head;
head = head->next;
temp1 = temp1->next;
temp1->next = NULL;
if(head!=NULL){
temp2->next = head;
head = head->next;
temp2 = temp2->next;
temp2->next = NULL;
}
}
head = new ListNode(0);
ListNode *p = head;
temp1 = head1->next;
temp2 = head2->next;
while(temp2!=NULL){
p->next = temp2;
temp2 = temp2->next;
p = p->next;
p->next = temp1;
temp1 = temp1->next;
p = p->next;
}
return head->next;
}
};
python代码如下:
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def swapPairs(self, head: ListNode) -> ListNode:
head1 = ListNode(0)
head2 = ListNode(0)
temp1 = head1
temp2 = head2
if head==None:
return head
elif head.next==None:
return head
while head!=None:
temp1.next = head
head = head.next
temp1 = temp1.next
temp1.next = None
if head!=None:
temp2.next = head
head = head.next
temp2 = temp2.next
temp2.next = None
head = ListNode(0)
p = head
temp1 = head1.next
temp2 = head2.next
while temp2!=None:
p.next = temp2
temp2 = temp2.next
p = p.next
p.next = temp1
temp1 = temp1.next
p = p.next
return head.next
这道题目虽然是一道中等难度的题目,但思路还是比较简单的,这里就不详细解释了。