描述
给一个链表,两两交换其中的节点,然后返回交换后的链表。
您在真实的面试中是否遇到过这个题?
是
样例
给出 1->2->3->4
, 你应该返回的链表是 2->1->4->3
。
挑战
你的算法只能使用常数的额外空间,并且不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
添加一些指针辅助运算,注意各个指针是否为空。
/**
* Definition of singly-linked-list:
* class ListNode {
* public:
* int val;
* ListNode *next;
* ListNode(int val) {
* this->val = val;
* this->next = NULL;
* }
* }
*/
class Solution {
public:
/**
* @param head: a ListNode
* @return: a ListNode
*/
ListNode * swapPairs(ListNode * head) {
// write your code here
if(head==NULL||head->next==NULL) return head;
ListNode * no1=head;
ListNode * no2=head->next;
head=no2;
ListNode * lastnode=NULL;
while(no1!=NULL&&no2!=NULL){
no1->next=no2->next;
no2->next=no1;
if(lastnode!=NULL) lastnode->next=no2;
lastnode=no1;
no1=no1->next;
if(no1) no2=no1->next;
else break;
}
return head;
}
};