给一个链表,两两交换其中的节点,然后返回交换后的链表。
样例:
给出 1->2->3->4, 你应该返回的链表是 2->1->4->3。
挑战 :
你的算法只能使用常数的额外空间,并且不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
#ifndef C451_H
#define C451_H
#include<iostream>
using namespace std;
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)
return NULL;
ListNode *node = new ListNode(-1);
ListNode *l = node;
node->next = head;
ListNode *p = head;
while (p != NULL&&p->next!=NULL)
{
ListNode *q = p->next;
p->next = q->next;
q->next = p;
p = p->next;
l->next = q;
l = l->next->next;
}
return node->next;
}
};
#endif