class Node//节点类
{
public:
Node* next;
int data;
Node()
{
next = NULL;
}
};
class LinkList//实例化得到一个带有空节点的头指针
{
public:
Node* head;//头指针
int len;
LinkList()
{
head = new Node();//head头指针指向一个空节点
len = 0;
}
~LinkList()//从头删到尾
{
Node* p, * q;
p = head;
while (p != NULL)
{
q = p;
p = p->next;
delete q;
}
len = 0;
head = NULL;
}
};
循环链表
Oj题目:约瑟夫环
#include <iostream>
using namespace std;
class Node//节点类
{
public:
Node* next;
int data;
Node()
{
next = NULL;
}
};
class LinkList//实例化得到一个带有空节点的头指针
{
public:
Node* head;//头指针
int len;
LinkList()
{
head = new Node();//head头指针指向一个空节点
len = 0;
}
~LinkList()//从头删到尾
{
delete head;
}
void initialize()
{
int num;
cin >> num;
Node* p = head;
for (int i = 1; i <= num; i++)
{
Node* q = new Node();
q->data = i;
p->next = q;
p = p->next;
}
p->next = head;//循环链表
}
void Joseph()
{
int k, s;
cin >> k >> s;
Node* start = head,*temp;
for (int i = 1; i < s; i++)//到达指定节点之前
{
start = start->next;
}
while (head->next->next!= head)//只剩最后一个节点时退出循环
{
for (int i = 1; i < k; i++)//k-1次
{
if (start->next->next == head)//跳过头节点
{
start = start->next->next;
}
else
{
start = start->next;
}
}
cout << start->next->data << ' ';
temp = start->next;//删除节点
start->next = temp->next;
delete temp;
}
cout << start->next->data << ' ' << endl;
}
};
int main()
{
LinkList temp01;
temp01.initialize();
temp01.Joseph();
return 0;
}
Oj题目:交换节点
#include <iostream>
using namespace std;
class Node
{
public:
int data;
Node* next;
Node()
{
next = NULL;
}
};
class LinkList
{
public:
int len;
Node* head;
LinkList()
{
head = new Node();
len = 0;
}
~LinkList()
{
Node* p, * q;
p = head;
while (p != NULL)
{
q = p;
p = p->next;
delete q;
}
}
void initialize()
{
cin >> len;
Node* p = head;
for (int i = 0; i < len; i++)
{
int temp;
cin >> temp;
Node* q = new Node();
q->data = temp;
p->next = q;
p = p->next;
}
}
Node* num_point(int n)//返回所找节点的前一个指针
{
Node* temp = head;
for (int i = 1; i < n; i++)
{
temp = temp->next;
}
return temp;
}
void swap(Node* p, Node* q)
{/*未完成*/
int t = p->data;
p->data = q->data;
q->data = t;
}
void display()
{
Node* k = head->next;
while (k != NULL)
{
cout << k->data << ' ';
k = k->next;
}
cout << endl;
}
};
int main()
{
LinkList temp;
temp.initialize();
temp.display();
int t1, t2;
cin >> t1 >> t2;
Node* a, * b;
a = temp.num_point(t1);
b = temp.num_point(t2);
temp.swap(a, b);
temp.display();
return 0;
}