链表的建立、删除节点、侧长和打印;
2012-08-28 15:07
316 查看
/* *链表的建立、删除节点、侧长和打印; */ #include <stdio.h> #include <stdlib.h> #include <malloc.h> struct LinkNode { int data; struct LinkNode* next; }; typedef LinkNode* LinkList; // LinkNode* AddNode(LinkNode* p,int data); // int list_length(LinkList head); // void list_print(LinkList head); // void list_delete_node(LinkList head,int num); // void list_reverse(LinkList head); // LinkNode* list_middle(LinkList head); int main(void) { LinkList L1=(LinkNode*)malloc(sizeof(LinkNode)); LinkNode*pTemp=L1; for(int i=0;i<10;i++) { pTemp=AddNode(pTemp,i); } int temp=list_length(L1); printf("the length of L1 is %d\n",temp); list_print(L1); // list_delete_node(L1,8); // list_reverse(L1); // temp=list_length(L1); // printf("the length of L1 is %d\n",temp); // list_print(L1); LinkNode*pr=list_middle(L1); printf("the middle node of L1 is %d\n",pr->data); system("pause"); return 0; } // LinkNode* AddNode(LinkNode* p,int data) { LinkNode* pNode=(LinkNode*)malloc(sizeof(LinkNode)); pNode->data=data; pNode->next=0; p->next=pNode; return pNode; } // int list_length(LinkList head) { int length=0; if(head==0) return length; LinkList p=head->next; while(p) { length++; p=p->next; } return length; } // void list_print(LinkList head) { if(head) { LinkList temp=head->next; while(temp) { printf("%d\n",temp->data); temp=temp->next; } } } void list_delete_node(LinkList head,int num) { if(head) { LinkNode* p,*q; p=head; q=head->next; while(q) { if(q->data==num) { p->next=q->next; free(q); q=p->next; } else { p=q; q=p->next; } } } } //链表逆置 void list_reverse(LinkList head) { LinkList p1,p2,p3; if(head) { if(head->next && head->next->next) { p2=head->next; p3=p2->next; while(p3) { p2->next=p1; p1=p2; p2=p3; p3=p3->next; } p2->next=p1; p1=p2; } head->next=p1; } } //遍历一次求获取位于中间位置的那个节点 LinkNode* list_middle(LinkList head) { if(head && head->next) { LinkList p,q; p=q=head->next; while(q) { p=p->next; if(q->next) { q=q->next->next; } else break; } return p; } else return 0; }
相关文章推荐
- 链表:检测是否有环,是否相交,删除节点,插入节点,打印节点,建立节点,节点排序,节点逆序,
- 单链表的建立、测长、打印、删除节点、插入节点、排序、逆转
- 单链表的建立、测长、打印、删除节点、插入节点
- 单链表的建立,查找,插入,删除,测长,打印,逆置操作实现
- 单链表的建立,测长度,打印,删除,插入,逆置c++代码实例及运行结果
- 每日一题——删除无头链表的非尾节点、逆向打印单链表
- 链表的基本操作,建立,测长,删除,打印,插入
- 访问单个节点的删除、链表的分化、打印两个链表的公共值
- 20140502 static_cast和dynamic_cast的类型检查 双链表建立,删除,打印
- 链表之节点插入、查找删除、遍历打印、遍历释放
- C语言——链表部分(包括节点的建立、总长度、显示链表、插入节点以及删除节点)
- 树的基本结构,以及利用链表实现树的各项操作(创建、添加/删除/打印树节点、销毁等等)
- 单链表的建立,测长度,打印,删除,插入,逆置c++代码实例及运行结果
- 单链表的建立,测长度,打印,删除,插入,逆置c++代码实例及运行结果
- 【程序员面试宝典】数据结构基础二单链表循环链表的操作 建立|插入删除|打印|合并
- 单向链表的建立、打印、查找、插入、删除
- 单链表的建立,测长度,打印,删除,插入,逆置c++代码实例及运行结果
- 建立单链表并打印链表节点值
- 单链表的建立,测长度,打印,删除,插入,逆置c++代码实例及运行结果
- 判断链表相交,删除无头单链表的非尾节点及倒序打印单链表——题集(四)