/*
很多坑!!
思路是这样的,翻转链表其实就是翻转指针,从入口开始第一个的后一个,每一个都指向前面,然后入口的next 指向最后一个;此时注意第一个的next我们没动,所以要指向最后一个的原来的next

现在想想还是写个专门翻转的函数,返回俩头,但要返回指针的指针

*/
ListNode* reverseBetween(ListNode* head, int m, int n) {
    if(m ==n) return head;
    ListNode* dummy = new ListNode(0);
    dummy -> next = head;
    ListNode* pre = dummy;
    for(int i= 1; i< m; i++){
        pre = pre -> next; 
    }
    ListNode* cur(pre -> next -> next);
    ListNode* rtail(pre -> next);
    for(int i = 0; i< n-m;i++){
        ListNode * tmp =cur -> next;
        cur -> next = pre -> next;
        pre -> next = cur;
        cur = tmp;
    }
    rtail -> next = cur;
    return dummy -> next;
}
Beispiel #2
0
ptail(){
	if(!pflag)
		ratfor ? rtail() : ctail();
	pflag = 1;
	}