链表-专题

前面:我真的很不喜欢刷题

 

题型一:反转链表

 ListNode* reverseList(ListNode* head) {
        ListNode* p1=NULL,*p2=head;
        while(p2)
        {
            ListNode *tmp=p2->next;
            p2->next=p1;
            p1=p2;
            p2=tmp;
        }
        return p1;
    }

 题型二:反转链表2

Given 1->2->3->4->5->NULLm = 2 and n = 4,

return 1->4->3->2->5->NULL.

 

ListNode* reverseBetween(ListNode* head, int m, int n) {
        
        ListNode* p1=head;
        for(int i=1;i<m-1;i++) p1=p1->next;
        ListNode* p2=NULL,*p3=p1->next,*p4;
        if(m==1) p3=p1;
        int cnt=m;
        ListNode *tmp=NULL;
        while(cnt!=n+1)
        {
            tmp=p3->next;
            p3->next=p2;
            p2=p3;
            p3=tmp;
            if(cnt==m) p4=p2;
            cnt++;
        }
        if(m!=1)
        {
        p1->next=p2;
        p4->next=tmp;
        }
        else
        {
            head=p2;
            p4->next=tmp;
        }
        return head;
        
        
    }

  

posted @ 2017-08-06 16:21  simple_wxl  阅读(224)  评论(0编辑  收藏  举报