单链表的逆转

来源:互联网 发布:花生壳域名 编辑:程序博客网 时间:2024/05/16 00:48
/*************************************************************************  * File Name: Solution.cpp  * Description:   * Author: Yuji CAO  * Mail: caoyuji@sogou-inc.com  * Created_Time: 2015-07-29 07时16分44秒  * Last modified: 2015-07-29 07时16分44秒 ************************************************************************/#include<stdio.h>#include<vector>#include<string>#include<map>#include<set>using namespace std;struct ListNode{    int _val;    ListNode *_next;    ListNode():_val(0),_next(NULL){}    ListNode(int val):_val(val),_next(NULL){}};ListNode* revertList(ListNode* head){    if(head==NULL)return NULL;    ListNode* cur=head->_next;    ListNode* pre=head;    pre->_next=NULL;    while(cur!=NULL){        ListNode* curR=cur;        cur=cur->_next;        curR->_next=pre;        pre=curR;    }    return pre;}void printList(ListNode* head){    while(head){        printf("%d\t",head->_val);        head=head->_next;    }    printf("\n");}int main(){    ListNode* cur=new ListNode(0);    ListNode* pHead=cur;    for(int i=1;i<10;++i){        cur->_next=new ListNode(i);        cur=cur->_next;    }    printf("\n-----------------------------\n");    printList(pHead);    printf("\n-----------------------------\n");    cur=revertList(pHead);    printList(cur);    printf("\n-----------------------------\n");    return 0;}

分析

算法的关键是增量控制,整个链表在逆转的过程中分为两个区段——逆转区和原始区。技巧的核心是指针规划使用。

0 0
原创粉丝点击