链表中,每两个交换一下顺序,若是奇数个节点,最后一个不变。
C++实现代码如下:
#include <iostream>
struct Node
{
Node* nextPtr;
int num;
Node(int n):nextPtr(nullptr),num(0)
{
num = n;
}
};
Node* fun(Node* h)
{
Node* p1 = h;
Node* p2 = h;
if (p1->nextPtr != nullptr)
{
p2 = p1->nextPtr;
}
h = p2;
p1->nextPtr = p2->nextPtr;
p2->nextPtr = p1;
for (; p1->nextPtr != nullptr;)
{
p2 = p1->nextPtr;
if (p2->nextPtr == nullptr)
{
break;
}
p2 = p2->nextPtr;
p1->nextPtr->nextPtr = p2->nextPtr;
p2->nextPtr = p1->nextPtr;
p1->nextPtr = p2;
p1 = p2->nextPtr;
}
return h;
}
int main()
{
Node* h= nullptr;
Node* p = nullptr;
h = new Node(1);
p = h;
const int N = 10;
for (int i = 1; i < N; i++)
{
p->nextPtr = new Node(i + 1);
p = p->nextPtr;
}
Node* h2 = fun(h);
Node* p2 = h2;
for (int i = 0; i < N; i++)
{
std::cout << p2->num << " ";
p2 = p2->nextPtr;
}
//释放内存
p2 = h2;
for (int i = 0; i < N; i++)
{
if (p2->nextPtr == nullptr)
break;
h2 = p2->nextPtr;
delete p2;
p2 = h2;
}
system("pause");
return 0;
}
若节点中的数据是1-10;
则运行结果是: