编辑代码

#include <stdio.h>
#include <stdlib.h>
typedef char ElemType;
typedef struct node
{
	ElemType data; //数据域 
	struct node *next; //指针域 
}LNode,*LinkList; //LNode结构体变量,LinkList结构体指针 

void print(LinkList head);
LinkList createTail();
LinkList createHead();
int length(LinkList head);
int insertAfter(LinkList head,int i,ElemType item);
int del(LinkList head,int i);

int main()
{
	printf("欢迎进入链表操作子系统!\n");
	printf("1.创建链表-尾插法\n");
	printf("2.创建链表-头插法\n");
	printf("-------------------------------\n");
	printf("3.输出链表\n");
	printf("4.求链表的长度\n");
	printf("5.在链表第i个结点后插入一个数据域为item的新结点\n");
	printf("6.删除链表的第i个结点\n");
	printf("7.预留功能1\n");
	printf("8.预留功能2\n");
	printf("9.预留功能3\n");
	printf("10.退出系统\n");
	int choice;
	LinkList head = NULL;
	while(~scanf("%d",&choice))
	{
		switch(choice)
		{
			case 1: printf("1.创建链表-尾插法\n");
					head = createTail();
					break;
					
			case 2: printf("2.创建链表-头插法\n");
					break;
			
			case 3: printf("3.输出链表\n");
					print(head);
					break;
					
			case 10: printf("系统即将退出,欢迎再次使用!\n");
					 break;
		}
		if(choice = 10)
			break;
	}
	return 0;
}

void print(LinkList head)
{
	if(head == NULL)
	{
		printf("链表为空!\n");
		return;
	}
	LinkList p = head;
	while(p -> next != NULL)
	{
		printf("%c->",p -> data);
		p = p -> next; 
	}
	printf("%c\n",p -> data);
}

LinkList createTail()
{
	LinkList head = NULL,tail,p;
	char ch;
	while(~scanf("%c",&ch))
	{
		if(ch == '#')
			break;
		if(ch == ' ' || ch == '\t' || ch == '\r' || ch == '\n')
			continue;
		p = (LinkList)malloc(sizeof(LNode));
		p -> data = ch;
		p -> next = NULL;
		if(head == NULL)
			head = p;
		else
			tail -> next = p;
		tail = p;
	}
	return head;
}

LinkList createHead()
{
	LinkList head = NULL,p;
	char ch;
	while(~scanf("%c",&ch))
	{
		if(ch == '#')
			break;
		if(ch == ' ' || ch == '\t' || ch == '\r' || ch == '\n')
			continue;
		p = (LinkList)malloc(sizeof(LNode));
		p -> data = ch;
		p -> next = NULL;
		head = p;
	}
	return head;
}

int length(LinkList head)
{
	int len;
	LinkList p = head;
	while(p -> next != NULL)
	{
		len ++;
		p  = p -> next;
	}
	return len;
}

int insertAfter(LinkList head,int i,ElemType item)
{
	LinkList p = head,s;
	int k;
	while((p != NULL) && (k < i-1))
	{
		p = p -> next;
		k++;
	}
	if(p == NULL || k > i+1) //第i-1不存在 
		return -1;
	else
	{
		s = (LinkList)malloc(sizeof(LNode));
		s -> data = item;
		s -> next = p->next;
		p -> next = s;
		return 1;
	}
}

int del(LinkList head,int i)
{
	LinkList p = head,s;
	int k;
	while((p != NULL) && (k < i-1))
	{
		p = p -> next;
		k++;
	}
	if(p == NULL || k > i+1)
		return -1;
	else if(p -> next = NULL) //第i个不存在 
		return -1;
	else
	{
		s = p -> next;
		p -> next = s -> next;
		free(s);
		return 1;
	}
}

int searchNode(LinkList head,ElemType target)
{
	LinkList p = head;
	int t  = 0;
	while(p != NULL)
	{
		t++;
		if(p -> data == target)
			return t;
		p = p -> next;
	}
	return -1;
}