-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlinklist.cpp
129 lines (106 loc) · 1.98 KB
/
linklist.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
#include "linklist.h"
//初始化链表
void LinkList::Init() {
//构造循环链表的头节点
if (head == nullptr) {
head = new Node();
head->next = head;
head->prior = head;
}
int i = 0;
int number = 0; //number用于保存每一次获取到需要保存到节点里面的值
//如果第一个字符为-则将链表对象标记为负数
if (link[i] == '-') {
symbol = 0;
i++;
} else {
symbol = 1;
}
while (i < link.size()) {
number = 0;
if (link[i] == ',') {
i++;
}
while (link[i] != ',') {
//这里用一个字符减去'0'将字符转化为整数,因为字符和数字的ASCII码差了48
number = number * 10 + link[i] - '0';
length++;
i++;
if (i == link.size()) {
break;
}
}
InsertNode(number);
//if (i == data.size() - 1 && symbol == 0) {
// InsertNode(number);
// break;
//} else if (i == data.size() - 2 && symbol == 1) {
// InsertNode(number);
// break;
//}
}
}
LinkList::LinkList(string data) {
link = data;
}
//获取到链表的字符串形式
string LinkList::get_link() {
return link;
}
//设置
void LinkList::set_link(string data) {
link = data;
}
//插入节点
void LinkList::InsertNode(int data) {
Node *p = new Node();
p->set_data(data);
//采用先右后左的方法插入节点至头节点之后
p->next = head->next;
head->next->prior = p;
head->next = p;
p->prior = head;
node_number++;
}
//默认构造函数
LinkList::LinkList() {
//构造循环链表的头节点
head = new Node();
head->next = head;
head->prior = head;
}
//默认析构函数
LinkList::~LinkList() {
}
//获取链表的长度
int LinkList::get_length() {
return length;
}
//设置链表的长度
void LinkList::set_length(int i) {
length = i;
}
//获取链表节点数量
int LinkList::get_node_number() {
return node_number;
}
//设置链表节点数量
void LinkList::set_node_number(int i) {
node_number = i;
}
//获取链表的标志符号
int LinkList::get_symbol() {
return symbol;
}
//设置链表的标志符号
void LinkList::set_symbol(int i) {
symbol = i;
}
//获得头节点的地址
Node* LinkList::get_head() {
return head;
}
//输出链表
void LinkList::Output() {
cout << link << endl;
}