//
// main.m
// LinkedList
//
#import <Foundation/Foundation.h>
typedef int DataType;
typedef struct Node{
DataType data;
struct Node *next;
}Node, *NodePtr;
void init(NodePtr *header){
*header = NULL;
}
int getSize(NodePtr header){
NodePtr p = header;
int count = 0;
while (p) {
count++;
p = p->next;
}
return count;
}
NodePtr getPtr(NodePtr header, int pos){
if (pos < 0 || pos >= getSize(header)) {
return NULL;
}
NodePtr p = header;
if (pos != 0) {//pos等于0,就返回头指针
for (int i = 0; i < pos; i++) {
p = p->next;
}
}
return p;
}
bool update(NodePtr header, int pos, DataType data){
if (pos < 0 || pos >= getSize(header)) {
return false;
}
NodePtr p = getPtr(header, pos);
p->data = data;
return true;
}
bool insert(NodePtr *header, int pos, DataType data){
if (pos < 0 || pos > getSize(*header)) {
return false;
}
NodePtr nodePtr = (NodePtr) malloc(sizeof(Node));
nodePtr->data = data;
nodePtr->next = NULL;
if (pos == 0) {
nodePtr->next = *header;
*header = nodePtr;
return true;
}
NodePtr p = getPtr(*header, pos - 1);
NodePtr temp = p->next;
p->next = nodePtr;
nodePtr->next = temp;
return true;
}
bool removeNode(NodePtr *header, int pos){
if (pos < 0 || pos >= getSize(*header)) {
return false;
}
NodePtr p = *header;
if (pos == 0) {
*header = p->next;
delete p;
return true;
}
NodePtr q = getPtr(p, pos - 1);
p = q->next;
q->next = p->next;
delete p;
return true;
}
int main(int argc, const char * argv[]) {
NodePtr header;
init(&header);
insert(&header, getSize(header), 0);
insert(&header, getSize(header), 1);
insert(&header, getSize(header), 2);
NodePtr p = getPtr(header, 1);
update(header, 1, 100);
removeNode(&header, 1);
return 0;
}