创建循环单链表(头插法)

来源:互联网 发布:无法打开淘宝登陆界面 编辑:程序博客网 时间:2024/06/05 03:03




#include <stdio.h>#include <stdlib.h>typedef int ItemValue;typedef struct LinkNode{ItemValue value;struct LinkNode *next;} Node, *pNode;/* 尾插法*/Node* CreateCylicSingleLinkedList(){Node *head = (Node *)malloc(sizeof(Node)); // Create the head nodeif (!head) {printf("链表创建失败 !\n");}head->next = NULL;ItemValue iValue;Node *pTemp;pTemp = head;while (scanf("%d", &iValue) != EOF){Node *p = (Node *)malloc(sizeof(Node));p->value = iValue;p->next = pTemp->next;pTemp->next = p;pTemp = p;}pTemp->next = head;return head;}/* 头插法 */Node *CreateCylicSingleLinkedListInHead(){Node *head = (Node *)malloc(sizeof(Node));if (NULL == head) {printf("链表头结点创建失败!\n");}head->next = NULL;ItemValue iValue;Node *pTemp;pTemp = NULL;int i = 0; //将尾部节点指向头结点while (scanf("%d", &iValue) != EOF){Node *p = (Node *)malloc(sizeof(Node));p->value = iValue;p->next = head->next; head->next = p;if (i==0) { pTemp = p; } //尾部节点指向头结点,有没有简洁的写法?++i;}pTemp->next = head;return head;}void VisitLinkedList(Node *L){Node *p;p = L;while (p->next != L){printf("%d ", p->next->value);p = p->next;}}int main(){//Node *g_Node = CreateCylicSingleLinkedList(); //尾插法创建循环单链表Node *g_Node = CreateCylicSingleLinkedListInHead(); //头插法创建循环单链表VisitLinkedList(g_Node);free(g_Node);system("pause");return 0;}


运行结果:输入 1  2  3  4  5  6  7  8

                    输出  8  7  6  5  4  3  2  1




0 0
原创粉丝点击