[数据结构]链表创建、打印、反转

来源:互联网 发布:软件著作权简历 编辑:程序博客网 时间:2024/04/29 05:37
  1. struct _Node
  2. {
  3.     int data;
  4.     _Node *next;
  5. };
  6. typedef struct _Node Node;
  7. /*****************************************************
  8.     Test 3: Node *CreateList(Node *head) 
  9. *****************************************************/
  10. Node *CreateList() 
  11. {
  12.     Node *head = NULL;
  13.     Node *cur = NULL;
  14.     Node *pre = NULL;
  15.     
  16.     cur=pre=head=(Node*)malloc(sizeof(Node));
  17.     cout<<"Please input the first node:";
  18.     cin>>cur->data;
  19.     cur->next=NULL;/*将新节点的指针置为空*/
  20.     while(cur->data != 0)/*输入节点的数值不等于0*/
  21.     {
  22.         pre->next=cur;/*非空表,接到表尾*/
  23.         pre=cur;
  24.         cur=(Node*)malloc(sizeof(Node));//申请下一个节点 
  25.         cout<<"Please input next node(zero to exit):";
  26.         scanf("%d",&cur->data);/*输入节点的值*/
  27.     }
  28.     pre->next = NULL; /*输入cur->data = 0, 抛弃*/
  29.     return head;/*返回链表的头指针*/
  30. }
  31. /*****************************************************
  32.  Test 4: void PrintfList(Node *head) 
  33. *****************************************************/
  34. void PrintList(Node *head)
  35. {
  36.  Node *cur = head;
  37.  cout<<"List:";
  38.  if(cur == NULL)
  39.  {
  40.   cout<<"NULL"<<endl;
  41.   return;
  42.  }
  43.  while(cur != NULL)
  44.  {
  45.   cout<<"("<<cur->data<<")"<<"->";
  46.   cur = cur->next;
  47.  }
  48.  cout<<endl;
  49. }
  50. /*****************************************************
  51.  Test 5: Node * ReverseList(Node *head) 
  52. *****************************************************/
  53. Node *ReverseList(Node *head)
  54. {
  55.  if(head == NULL)
  56.   return NULL;
  57.  Node *cur,*pre,*nex = NULL;
  58.   
  59.  pre = head;
  60.  cur = head->next;
  61.  while(cur != NULL)
  62.  {
  63.   nex = cur->next;
  64.   cur->next = pre;
  65.   pre = cur;
  66.   cur = nex;
  67.  }
  68.  head->next = NULL;
  69.  head = pre;
  70.  return head;
  71. }
  72. /*****************************************************
  73.  Test 6: Node * ReverseListRecursion(Node *head) 
  74. *****************************************************/
  75. Node *ReverseListRecursion(Node *head)
    {
     if(head == NULL || head->next == NULL)
      return head;
  76.  Node *newHead = ReverseListRecursion(head->next);
     head->next->next = head;
     head->next = NULL;
  77.  return newHead;
    }

调用

 

  1. /*****************************************************
  2.     Test : Node *CreateList(Node *head) 
  3.     *****************************************************/
  4.     Node *list = CreateList();
  5.     /*****************************************************
  6.     Test : void PrintfList(Node *head) 
  7.     *****************************************************/
  8.     cout<<"The List looks like this:"<<endl;
  9.     PrintList(list);
  10.     /*****************************************************
  11.         Test : Node * ReverseList(Node *head) 
  12.     *****************************************************/
  13.     //Node *reverselist = ReverseList(list);
  14.     //PrintList(reverselist); 
  15.     Node *reverselistRecursion = ReverseListRecursion(reverselist);
  16.     PrintList(reverselistRecursion);
  17.     System("pause");

截屏

原创粉丝点击