链表的建立与反转(递归反转和非递归反转)

#include <iostream>
using namespace std;

struct Node
{
 int data;
 Node* next;

 Node(int d):data(d),next(NULL){};
};

// 链表的非递归排序

Node* Reverse1(Node* head)
{
 Node* pre = NULL;
 Node* pNode = head;
 Node* reversedHead = NULL;

 while(pNode!=NULL)
 {
  Node* pNextNode = pNode->next;
  if(pNextNode == NULL)
  {
   reversedHead = pNode;
  }
  pNode->next = pre;

  pre = pNode;
  pNode = pNextNode;
 }

 return reversedHead;
}

// 链表的递归排序

Node* Reverse2(Node* list, Node* &head)
{
 if(list == NULL || list->next == NULL)
 {
        head->next = NULL;
        head = list;
        return list;
 }

else

 {
       Node* temp = Reverse2(list->next,head);
       temp->next = list;
       return list;

  }

}

 

// 链表的建立

Node* Create(Node* head)
{
 cout << "Give a list of int value. Quit if you print -111" << endl;
 while(1)
 {
  int value = 0;
  scanf("%d", &value);
  if(value == -111)
   break;
  Node* pNode = new Node(value);

  if(head == NULL)
  {
   head = pNode;
  }
  else
  {
   Node* pTmp = head;
   head = pNode;
   head->next = pTmp;
  }
 }

 return head;
}

void Print(Node* head)
{
 Node* pNode = head;
 while(pNode != NULL)
 {
  cout << pNode->data << "  ";
  pNode = pNode->next;
 }
 cout << endl;
}
int main()
{
 Node* head = NULL;
 Node* head2 = NULL;
 head = Create(head);
 Print(head);

 head = Reverse1(head); // 注意用法,返回值
 cout << "after 1:" << endl;
 Print(head);

 Reverse2(head,head);  // 注意用法,第二个head
 cout << "after 2:" << endl;
 Print(head);

 return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值