1、返回单链表中第pos个结点中的元素,若pos超出范围,则返回0
2、把单链表中第pos个结点的值修改为x的值,若修改成功返回1,否则返回0
3、向单链表的表头插入一个元素
4、向单链表的末尾添加一个元素
5、向单链表中第pos个结点位置插入元素为x的结点,若插入成功返回1,否则返回0
6、向有序单链表中插入元素x结点,使得插入后仍然有序
7、从单链表中删除表头结点,并把该结点的值返回,若删除失败则返回0
8、从单链表中删除表尾结点并返回它的值,若删除失败则返回0
#include <stdio.h> #include <string.h> #include <stdlib.h>typedef int Element; //定义节点结构 struct node {Element data; //数据域struct node *next;//指针域 };typedef struct node LinkNode; //创建单链表--不带头节点 LinkNode * createLinkList(); LinkNode * createLinkList() {LinkNode *head = NULL; //头LinkNode *tail = NULL; //尾LinkNode *temp = NULL; //临时的节点,指向当前创建的元素int data;scanf("%d",&data);while (data){temp = (LinkNode *)malloc(sizeof(LinkNode)); //temp指向该申请内存,下一次temp指向一个新的内存if (!temp) //申请失败 {printf("malloc failed.....");}else //申请成功 {temp->data = data; //写入数据到temp数据域中temp->next = NULL; //写入数据到temp指针域中 }if (head == NULL) //头为空的时候 {head = temp; //头指针指向temptail = temp; //尾指针指向temp }else //头不为空的时候 {tail->next = temp; //将temp赋给指针域,下一次作next域连上data域tail = temp; //尾指针指向temp }scanf("%d",&data);//接着输入下一个值,输入0就结束 }return head; }//输出单链表 void printLinkList(LinkNode *head); void printLinkList(LinkNode *head) {LinkNode *p = head;while (p){printf("%d\t",p->data);p = p->next;} }//求链表长度 int length(LinkNode *head); int length(LinkNode *head) {int len = 0;LinkNode *p = head;while (p){len++;p = p->next;}return len; } //1int modifyElement(LinkNode *head,int pop,int newElement); int modifyElement(LinkNode *head,int pop,int newElement) {int succss = 0;if (pop <= 0 || pop > length(head)){printf("oops:pos is invalid");return succss;}LinkNode *p = head;for (int i = 0; i < pop - 1; i++){p = p->next;}if (p){p ->data = newElement;succss = 1;}return succss; }//2(重点) int insertElementToHead(LinkNode **head,Element e); int insertElementToHead(LinkNode **head,Element e) {int success = 0;LinkNode *tmp = NULL;if (e){tmp = (LinkNode *)malloc(sizeof(LinkNode));tmp->data = e;tmp->next = NULL;}else{printf("zero is invalid");return 0;}//通过指针修改(重点)tmp->next = *head; //连接*head = tmp; //修改地址return success; }//3 int insertElementToEnd(LinkNode *head,Element e); int insertElementToEnd(LinkNode *head,Element e) {int success = 0;LinkNode *p = head;LinkNode *tmp = NULL;if(e){tmp = (LinkNode *)malloc(sizeof(LinkNode));tmp->data = e;tmp->next = NULL;}else{printf("zero is invalid");return 0;}while (p && p->next) {p = p->next;}p->next = tmp;return success; }int insertElementToPos(LinkNode *head,Element e,int pos); int insertElementToPos(LinkNode *head,Element e,int pos) {int success = 0;LinkNode *p = head;LinkNode *tmp = NULL;if (pos <= 0 && pos >length(head)){return success;}for (int i = 0; i < pos -2; i++) {p = p->next;}tmp = (LinkNode *)malloc(sizeof(LinkNode));tmp->data = e;tmp->next = NULL;if (p){tmp->next = p->next;p->next = tmp;success = 1;}return success; }int insertOrderLinkList(LinkNode *head,Element x); int insertOrderLinkList(LinkNode *head,Element x) {int success = 0;LinkNode *p = head;int loc = 1;while (p){if(p->data < x){p = p->next;loc++;}else{break;}}//此处还要分3种情况头尾中间success = insertElementToPos(head,x,loc);return success; }int deleteHeadNode(LinkNode **head); int deleteHeadNode(LinkNode **head) {int data = 0;LinkNode *p = *head;data = p->data;*head = p->next;return data;}int deleteEndNode(LinkNode *head); int deleteEndNode(LinkNode *head) {LinkNode *p = head;LinkNode *q = NULL;int data = 0;for (int i = 0; i < length(head) - 2 ; i++){p = p->next;}q = p->next;data = q->data;p->next = NULL;free(q);return data; }int main(int argc, const char * argv[]) {LinkNode *head = NULL;head=createLinkList();printLinkList(head);printf("len = %d\n",length(head));/*//1modifyElement(head,2,54);printLinkList(head);printf("\n");insertElementToHead(&head,90);//printLinkList(head);printf("\n");insertElementToEnd(head,70);printLinkList(head);printf("\n");insertElementToPos(head,100,3);printLinkList(head);printf("\n"); */insertOrderLinkList(head,23);//此时需表是有序的,输入10到50内数 printLinkList(head);printf("\n");deleteHeadNode(&head);printLinkList(head);printf("\n");deleteEndNode(head);printLinkList(head);return 0; }