链表

来源:互联网 发布:js创建节点 编辑:程序博客网 时间:2024/06/09 15:15

寻找单链表的中间结点

#include <stdio.h>typedef int ElemType;typedef struct LNODE  {ElemType data;struct LNODE *next;}LNODE, *LinkList;//寻找单链表的中间结点: 慢指针走一步,快指针走两步LNODE *middle(LNODE *head){if(NULL == head){return NULL;}LNODE *fast, *slow;//快指针、慢指针、临时指针fast = slow = head;while ((NULL != fast->next) && (NULL != fast->next->next)){slow = slow->next;fast = fast->next->next;}return slow;}void main(){LNODE *node, node1, node2, node3, node4, node5, node6, node7;node1.data = 1;node2.data = 2;node3.data = 3;node4.data = 4;node5.data = 5;node6.data = 6;node7.data = 7;node1.next = &node2;node2.next = &node3;node3.next = &node4;node4.next = &node5;node5.next = &node6;node6.next = &node7;node7.next = NULL;//求中间结点node = middle(&node1);printf("middle NODE: %d\n", node->data);}

单链表反序
#include <stdio.h>typedef int ElemType;typedef struct LNODE  {ElemType data;struct LNODE *next;}LNODE, *LinkList;//将一个单链表反序:从头部开始LinkList reverse(LinkList list){if ((list == NULL) || (list->next == NULL)){return list;}LNODE *pre = list;LNODE *cur = list->next;LNODE *tmp = NULL;pre->next = NULL;while(NULL != cur->next){/*tmp = cur->next;cur->next = pre;pre = cur;cur = tmp;*/tmp = cur;cur = cur->next;tmp->next = pre;pre = tmp;}cur->next = pre;return cur;}//递归将一个单链表反序:new是已经逆序的,old是原有的//LinkList reverse(LinkList oldlist, LinkList newlist = NULL)//{//if((oldlist == NULL) || (oldlist->next == NULL))//{//oldlist->next = newlist;//return oldlist;//}////LNODE *tmp = oldlist;////oldlist = oldlist->next;//tmp->next = newlist;//newlist = tmp;////return reverse(oldlist, newlist);//}//单循环链表:尾指针指向头结点//遍历整个链表void traversal(LinkList list){if (list == NULL){return;}LNODE *cur = list;while(NULL != cur){printf("%d\t", cur->data);cur = cur->next;}}void main(){LNODE *node, node1, node2, node3, node4, node5, node6, node7;node1.data = 1;node2.data = 2;node3.data = 3;node4.data = 4;node5.data = 5;node6.data = 6;node7.data = 7;node1.next = &node2;node2.next = &node3;node3.next = &node4;node4.next = &node5;node5.next = &node6;node6.next = &node7;node7.next = NULL;traversal(&node1);puts("\n");reverse(&node1);traversal(&node7);puts("\n");}

原创粉丝点击