Chinaunix首页 | 论坛 | 博客
  • 博客访问: 658628
  • 博文数量: 45
  • 博客积分: 931
  • 博客等级: 准尉
  • 技术积分: 590
  • 用 户 组: 普通用户
  • 注册时间: 2005-04-17 13:27
文章分类

全部博文(45)

文章存档

2013年(6)

2012年(15)

2011年(23)

2005年(1)

分类: C/C++

2012-08-11 15:27:07

1. 逆转单向链表

点击(此处)折叠或打开

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>

  4. //定义链表的节点。
  5. struct Link {
  6.     Link* next;
  7.     int value;
  8. };

  9. //递归方式:逆转单向链表
  10. Link* reverse1(Link *head)
  11. {
  12.     if(head == NULL ) return NULL;
  13.     if(head->next == NULL) return head;
  14.  
  15.     Link* tail = NULL;
  16.     Link* temp = head->next;
  17.     tail = reverse1(head->next);
  18.     temp->next = head;
  19.     head->next = NULL;
  20.     return tail;
  21. }
  22. //非递归方式:逆转单向链表
  23. void reverse(Link **head)
  24. {
  25.     if(!head || !(*head)) return;
  26.     Link *pre, *cur, *nex;
  27.     pre = NULL, cur=*head;
  28.     while(cur) {
  29.         nex = cur -> next;
  30.         cur->next = pre;
  31.         pre = cur;
  32.         cur = nex;
  33.     }
  34.     *head = pre;
  35. }

  36. //输出整个链表
  37. void printLink(Link *head)
  38. {
  39.     Link *curr = head;
  40.     while(curr) {
  41.         printf("%d ", curr->value);
  42.         curr = curr->next;
  43.     }
  44.     printf("\n");
  45. }

  46. int main(void)
  47. {
  48.     Link *head, *p[10], *newhead;
  49.     int num = 10;
  50.     for(int i=0; i<num; i++) {
  51.         p[i] = new Link();
  52.         p[i]->next = NULL;
  53.         p[i]->value = i+1;
  54.         if (i==0) head = p[i];
  55.         else p[i-1]->next = p[i];
  56.     }
  57.     printLink(head);
  58.     reverse(&head);
  59.     printLink(head);
  60.     for(int i=0; i<num; i++) delete p[i];
  61.     system("pause");
  62. }

阅读(4821) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~