#include <stdio.h>
#include <stdlib.h>
struct Node {
char data;
struct Node* next;
};
struct Node* InitList() {
return NULL;
}
struct Node* InsertTail(struct Node* head, char e) {
struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
newNode->data = e;
newNode->next = NULL;
if (!head) {
return newNode;
}
struct Node* p = head;
while (p->next) {
p = p->next;
}
p->next = newNode;
return head;
}
void DispList(struct Node* head) {
struct Node* p = head;
while (p) {
printf("%c", p->data);
p = p->next;
}
printf("\n");
}
int ListLength(struct Node* head) {
int len = 0;
struct Node* p = head;
while (p) {
len++;
p = p->next;
}
return len;
}
int ListEmpty(struct Node* head) {
return head == NULL;
}
int GetElem(struct Node* head, int i, char* e) {
int j = 1;
struct Node* p = head;
while (p && j < i) {
p = p->next;
j++;
}
if (!p || j > i) {
return 0;
}
*e = p->data;
return 1;
}
int LocateElem(struct Node* head, char e) {
int i = 1;
struct Node* p = head;
while (p) {
if (p->data == e) {
return i;
}
p = p->next;
i++;
}
return 0;
}
int main() {
struct Node* h = InitList();
h = InsertTail(h, 'a');
h = InsertTail(h, 'b');
h = InsertTail(h, 'c');
h = InsertTail(h, 'd');
h = InsertTail(h, 'e');
DispList(h);
printf("%d\n", ListLength(h));
printf("%s\n", ListEmpty(h) ? "空" : "非空");
char elem;
if (GetElem(h, 3, &elem)) {
printf("%c\n", elem);
}
printf("%d\n", LocateElem(h, 'a'));
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KCnN0cnVjdCBOb2RlIHsKICAgIGNoYXIgZGF0YTsKICAgIHN0cnVjdCBOb2RlKiBuZXh0Owp9OwoKc3RydWN0IE5vZGUqIEluaXRMaXN0KCkgewogICAgcmV0dXJuIE5VTEw7Cn0KCnN0cnVjdCBOb2RlKiBJbnNlcnRUYWlsKHN0cnVjdCBOb2RlKiBoZWFkLCBjaGFyIGUpIHsKICAgIHN0cnVjdCBOb2RlKiBuZXdOb2RlID0gKHN0cnVjdCBOb2RlKiltYWxsb2Moc2l6ZW9mKHN0cnVjdCBOb2RlKSk7CiAgICBuZXdOb2RlLT5kYXRhID0gZTsKICAgIG5ld05vZGUtPm5leHQgPSBOVUxMOwogICAgaWYgKCFoZWFkKSB7CiAgICAgICAgcmV0dXJuIG5ld05vZGU7CiAgICB9CiAgICBzdHJ1Y3QgTm9kZSogcCA9IGhlYWQ7CiAgICB3aGlsZSAocC0+bmV4dCkgewogICAgICAgIHAgPSBwLT5uZXh0OwogICAgfQogICAgcC0+bmV4dCA9IG5ld05vZGU7CiAgICByZXR1cm4gaGVhZDsKfQoKdm9pZCBEaXNwTGlzdChzdHJ1Y3QgTm9kZSogaGVhZCkgewogICAgc3RydWN0IE5vZGUqIHAgPSBoZWFkOwogICAgd2hpbGUgKHApIHsKICAgICAgICBwcmludGYoIiVjIiwgcC0+ZGF0YSk7CiAgICAgICAgcCA9IHAtPm5leHQ7CiAgICB9CiAgICBwcmludGYoIlxuIik7Cn0KCmludCBMaXN0TGVuZ3RoKHN0cnVjdCBOb2RlKiBoZWFkKSB7CiAgICBpbnQgbGVuID0gMDsKICAgIHN0cnVjdCBOb2RlKiBwID0gaGVhZDsKICAgIHdoaWxlIChwKSB7CiAgICAgICAgbGVuKys7CiAgICAgICAgcCA9IHAtPm5leHQ7CiAgICB9CiAgICByZXR1cm4gbGVuOwp9CgppbnQgTGlzdEVtcHR5KHN0cnVjdCBOb2RlKiBoZWFkKSB7CiAgICByZXR1cm4gaGVhZCA9PSBOVUxMOwp9CgppbnQgR2V0RWxlbShzdHJ1Y3QgTm9kZSogaGVhZCwgaW50IGksIGNoYXIqIGUpIHsKICAgIGludCBqID0gMTsKICAgIHN0cnVjdCBOb2RlKiBwID0gaGVhZDsKICAgIHdoaWxlIChwICYmIGogPCBpKSB7CiAgICAgICAgcCA9IHAtPm5leHQ7CiAgICAgICAgaisrOwogICAgfQogICAgaWYgKCFwIHx8IGogPiBpKSB7CiAgICAgICAgcmV0dXJuIDA7CiAgICB9CiAgICAqZSA9IHAtPmRhdGE7CiAgICByZXR1cm4gMTsKfQoKaW50IExvY2F0ZUVsZW0oc3RydWN0IE5vZGUqIGhlYWQsIGNoYXIgZSkgewogICAgaW50IGkgPSAxOwogICAgc3RydWN0IE5vZGUqIHAgPSBoZWFkOwogICAgd2hpbGUgKHApIHsKICAgICAgICBpZiAocC0+ZGF0YSA9PSBlKSB7CiAgICAgICAgICAgIHJldHVybiBpOwogICAgICAgIH0KICAgICAgICBwID0gcC0+bmV4dDsKICAgICAgICBpKys7CiAgICB9CiAgICByZXR1cm4gMDsKfQoKaW50IG1haW4oKSB7CiAgICBzdHJ1Y3QgTm9kZSogaCA9IEluaXRMaXN0KCk7CiAgICBoID0gSW5zZXJ0VGFpbChoLCAnYScpOwogICAgaCA9IEluc2VydFRhaWwoaCwgJ2InKTsKICAgIGggPSBJbnNlcnRUYWlsKGgsICdjJyk7CiAgICBoID0gSW5zZXJ0VGFpbChoLCAnZCcpOwogICAgaCA9IEluc2VydFRhaWwoaCwgJ2UnKTsKCiAgICBEaXNwTGlzdChoKTsKICAgIHByaW50ZigiJWRcbiIsIExpc3RMZW5ndGgoaCkpOwogICAgcHJpbnRmKCIlc1xuIiwgTGlzdEVtcHR5KGgpID8gIuepuiIgOiAi6Z2e56m6Iik7CgogICAgY2hhciBlbGVtOwogICAgaWYgKEdldEVsZW0oaCwgMywgJmVsZW0pKSB7CiAgICAgICAgcHJpbnRmKCIlY1xuIiwgZWxlbSk7CiAgICB9CiAgICBwcmludGYoIiVkXG4iLCBMb2NhdGVFbGVtKGgsICdhJykpOwoKICAgIHJldHVybiAwOwp9