设为首页 加入收藏

TOP

单向列表倒置
2013-02-08 14:33:38 来源: 作者: 【 】 浏览:560
Tags:单向 倒置
  算法示例:
  head  end   tmp
  1---->2---->3---->4---->5
  end   head     tmp
  2---->1        3---->4---->5
  head       end   tmp
  2---->1    3---->4---->5
  end  head        tmp
  3---->2---->1    4---->5
  head             end   tmp
  3---->2---->1    4---->5
  end  head              tmp
  4---->3---->2---->1    5
  head                   end   tmp
  4---->3---->2---->1    5    NULL
  end  head
  5---->4---->3---->2---->1
  示例代码:
  [cpp]
  #include <stdio.h>
  #include <stdlib.h>
  typedef struct LIST_NODE {
  struct LIST_NODE* next;
  int value;
  }LIST_NODE;
  LIST_NODE* list_inversion(LIST_NODE *head) {
  printf("in list_inversion\n");
  LIST_NODE *tmp, *end;
  end = head->next;
  tmp = end->next;
  head->next = NULL;
  while (NULL != tmp) {
  end->next = head;
  head = end;
  end = tmp;
  tmp = tmp->next;
  }
  end->next = head;
  return end;
  }
  int main() {
  LIST_NODE *head, *end;
  head = (LIST_NODE*)malloc(sizeof(LIST_NODE)*1);
  end = (LIST_NODE*)malloc(sizeof(LIST_NODE)*1);
  LIST_NODE* tmp = (LIST_NODE*)malloc(sizeof(LIST_NODE)*1);
  int len = 0, value = 0;
  printf("Input length of list :\n");
  scanf("%d", &len);
  tmp = head;
  for(int i= 0; i < len; i++) {
  LIST_NODE* tmp2 = (LIST_NODE*)malloc(sizeof(LIST_NODE)*1);
  printf("Input the current value : ");
  tmp->next = tmp2;
  if (i == len-1) {
  tmp->next = NULL;
  }
  scanf("%d", &value);
  tmp->value = value;
  tmp = tmp->next;
  }
  LIST_NODE *aList = list_inversion(head);
  printf("new list : \n");
  while (NULL != aList) {
  printf("%d\n", aList->value);
  aList= aList->next;
  }
  }
  示例运行结果:
  [root@localhost List]# ./listtest
  Input length of list :
  5
  Input the current value : 1
  Input the current value : 2
  Input the current value : 3
  Input the current value : 4
  Input the current value : 5
  in list_inversion
  new list :
  5
  4
  3
  2
  1

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C/C++/Java/C#的基础类型 下一篇C++函数调用栈空间结构探究

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: