难度:medium
类别:linked list
1.题目描述
Given a linked list, swap every two adjacent nodes and return its head.
For example,
Given 1->2->3->4, you should return the list as 2->1->4->3.
Your algorithm should use only constant space. You may not modify the values in the list, only nodes itself can be changed.
2.算法分析
这道题目其实非常简单,算不上medium难度,因为只需要将相邻两个节点的值进行交换即可。
3.代码实现
#include <iostream>
using namespace std;
struct ListNode {
int val;
ListNode *next;
ListNode(int x) :val(x), next(NULL) {}
};
//
ListNode* swapPairs(ListNode* head) {
int count = 0;
ListNode* temp = head;
int num = 0;
while (temp != NULL) {
if (count % 2 == 0) {
if (temp->next != NULL) {
num = temp->val;
temp->val = temp->next->val;
temp->next->val = num;
}
}
count++;
temp = temp->next;
}
return head;
}
void printList(ListNode* head) {
while (head != NULL) {
cout << head->val << " ";
head = head->next;
}
cout << endl;
}
int main() {
int n, num;
cin >> n;
ListNode* head = NULL;
ListNode* temp = NULL;
for (int i = 0; i < n; ++i) {
cin >> num;
if (i == 0) {
head = new ListNode(num);
temp = head;
}
else {
head->next = new ListNode(num);
head = head->next;
}
}
printList(temp);
temp = swapPairs(temp);
printList(temp);
system("pause");
return 0;
}