C++反转链表
1 #include <iostream> 2 using namespace std; 3 struct my_list{ 4 5 int val; 6 my_list* next; 7 my_list(int _val):val(_val),next(nullptr){} 8 }; 9 my_list* reverse_list(my_list* head) 10 { 11 if(head==nullptr) return head;//为空的情况 12 13 my_list* pre=head; 14 my_list* tmp=nullptr; 15 my_list* cur=nullptr;//头节点指向空,所以先初始化为nullptr 16 while(pre) 17 { 18 tmp=pre->next;//保留下一个待处理的节点 19 pre->next=cur;//指向前一个节点 20 cur=pre; 21 pre=tmp; 22 } 23 return cur; 24 } 25 /* 26 Linknode* reverse_ln(Linknode* node) 少定义一个变量 27 { 28 if(node == nullptr) return nullptr; 29 Linknode* pre = nullptr;//前一个位置 30 Linknode* tmp = node;//存后一个位置 31 while(node) 32 { 33 tmp = tmp->next; 34 node->next = pre; 35 pre = node; 36 node = tmp; 37 } 38 return pre; 39 }*/ 40 int main(int argc, char *argv[]) 41 { 42 my_list *node0=new my_list(1); 43 my_list *node1=new my_list(2); 44 my_list *node2=new my_list(3); 45 my_list *node3=new my_list(4); 46 my_list *node4=new my_list(5); 47 node0->next=node1; 48 node1->next=node2; 49 node2->next=node3; 50 node3->next=node4; 51 auto node=reverse_list(node0); 52 while(node!=nullptr) 53 { 54 cout<<node->val<<" "; 55 node=node->next; 56 } 57 return 0; 58 }