链表结点声明如下:
struct LinkList {
int value;
LinkList *next;
};
以下是不带头结点的单链表的操作。
int main() {
/*LinkList *head = BuildList();
head = InsertToHead(9, head);
head = InsertToTail(100, head);
head = DeletebyValue(2, head);
printf("length: %d
", Length(head));
PrintList(head);
head = Sort(head);
printf("list1: ");PrintList(head);*/
/*head = ReverseList(head);
PrintList(head);*/
/*LinkList* kth = GetRKthNode(head, 1);
if (kth)
printf("1th:%d
", kth->value);*/
/*LinkList *mid = GetMiddleNode(head);
if (mid)
printf("mid : %d
", mid->value);*/
/*RPrintListRecursively(head);
printf("
");
RPrintList(head);*/
//LinkList *head = BuildList();
//LinkList *headb = BuildList();
//printf("list2: ");PrintList(headb);
//LinkList *head_merge = MergeList(head, headb);
////LinkList *head_merge = MergeListRecursively(head, headb);
//printf("list merge: ");PrintList(head_merge);
/*
//LinkList* head = (LinkList*)malloc(sizeof(LinkList));
//head->next = head;
LinkList *head = BuildList();
LinkList *temp = head;
while (temp->next)
temp = temp->next;
temp->next = head;
if (HasCircle(head)) {
printf("yes
");
}
else
printf("no
");*/
/*LinkList *head = BuildList();
LinkList *temp = head;
while (temp->next)
temp = temp->next;
LinkList* headb = BuildList();
temp->next = headb->next->next;
LinkList* p = GetFirstCrossNode(head, headb);
if (p)
printf("%d
", p->value);*/
}
完整源码的github地址:https://github.com/liyangddd/algorithms/blob/master/3list_none_head_node.cpp
参考:
http://blog.csdn.net/walkinginthewind/article/details/7393134