面试啦,写个linkedlist

  1. // linkedlist.cpp : 定义控制台应用程序的入口点。
  2. //

  3. #include "stdafx.h"
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6. #include <assert.h>

  7. typedef struct node
  8. {
  9.     int data;
  10.     struct node* next;
  11. }Node, *PNode;

  12. PNode newNode(int data)
  13. {
  14.     PNode p = (PNode)malloc(sizeof(Node));
  15.     assert(p != NULL);
  16.     p->data = data;
  17.     p->next = NULL;
  18.     return p;
  19. }

  20. // PNode tail(PNode head, int *length)
  21. // {
  22. //     assert( head != NULL);
  23. //     PNode p;
  24. //     p = head;
  25. //     *length = 0;
  26. //     while ( p->next != NULL )
  27. //     {
  28. //         p = p->next;
  29. //         (*length)++;
  30. //     }
  31. //     return p;
  32. // }

  33. PNode create()
  34. {
  35.     PNode p= newNode(0);
  36.     return p;
  37. }

  38. int insert(PNode head, PNode s)
  39. {
  40.     assert (head != NULL && s != NULL);
  41.     PNode prev;
  42.     prev = head;
  43.     int i=0;
  44.     while ( prev->next != NULL )
  45.     {
  46.         prev = prev->next;
  47.     }

  48.     prev->next = s;
  49.     s->next = NULL;
  50.     return i;
  51. }

  52. void del(PNode head)
  53. {
  54.     assert (head != NULL);
  55.     PNode p, prev;
  56.     p = prev = head;

  57.     while ( p->next != NULL )
  58.     {
  59.         prev = p;
  60.         p = p->next;        
  61.     }
  62.     
  63.     free(p);
  64.     p = NULL;
  65.     prev->next = NULL;
  66. }

  67. PNode inverse(PNode head)
  68. {
  69.     assert (head != NULL);
  70.     PNode cur, prev, behind;
  71.     cur = prev = behind = head->next;
  72.     
  73.     behind = cur->next;
  74.     head->next = NULL;
  75.     cur->next = NULL;
  76.     while (behind->next != NULL)
  77.     {
  78.         prev = cur;
  79.         cur = behind;
  80.         behind = behind->next;
  81.         cur->next = prev;        
  82.     }
  83.     behind->next = cur;
  84.     PNode newhead = newNode(0);
  85.     newhead->next = behind;
  86.     return newhead;
  87. }

  88. int length(PNode head)
  89. {
  90.     assert (head != NULL);
  91.     int length=0;
  92.     PNode p = head;
  93.     while (p->next != NULL)
  94.     {
  95.         p = p->next;
  96.         length++;
  97.     }
  98.     return length;
  99. }

  100. void print(PNode head)
  101. {
  102.     assert(head != NULL);
  103.     PNode p = head->next;
  104.     printf("length: %d/n", length(head));

  105.     while (p != NULL)
  106.     {
  107.         printf("%d ", p->data);
  108.         p = p->next;
  109.     }

  110.     printf("/n");
  111. }


  112. int _tmain(int argc, _TCHAR* argv[])
  113. {
  114.     PNode head;
  115.     head = create();

  116.     int i;
  117.     for (i=0; i<10; i++)
  118.     {
  119.         insert(head, newNode(i));
  120.     }
  121.     
  122.     del(head);
  123.     head = inverse(head);
  124.     print(head);
  125.     return 0;
  126. }


把_tmain换成main就可以用gcc编译了.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值