码迷,mamicode.com
首页 > 其他好文 > 详细

leetcode_92题——Reverse Linked List II(链表操作)

时间:2015-06-03 11:25:24      阅读:121      评论:0      收藏:0      [点我收藏+]

标签:

Reverse Linked List II

 Total Accepted: 40420 Total Submissions: 154762My Submissions

 

Reverse a linked list from position m to n. Do it in-place and in one-pass.

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

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

Note:
Given mn satisfy the following condition:
1 ≤ m ≤ n ≤ length of list.

 

Hide Tags
 Linked List
Have you met this question in a real interview? 
Yes
 
No
 

Discuss

        这道题与上面的61题基本是相似的,只是要更加的注意一些特殊情况,比如m与n相等,m=1.或者n是最后一个

#include<iostream>
using namespace std;
struct ListNode 
{
	int val;
    ListNode *next;
	ListNode(int x) : val(x), next(NULL) {}
};

ListNode* reverseBetween(ListNode* head, int m, int n) {
	ListNode *ptr0=head;
	ListNode *ptr1=head;
	ListNode *ptr2=head;
	ListNode *ptr3=head;

	if(m==n)
		return head;
	if(m>1)
	{
		ptr1=ptr1->next;
		int a=m-2;
		while(a>0)
		{
			a--;
			ptr0=ptr0->next;
			ptr1=ptr1->next;
		}
	}
	ptr2=ptr1->next;
	int b=n-m-1;
	while(b>=0)
	{
		ptr3=ptr2->next;
		ptr2->next=ptr1;
		ptr1=ptr2;
		ptr2=ptr3;
		b--;
	}
	if(m==1)
	{
		if(ptr3==NULL)
		{
			ptr0->next=NULL;
			return ptr1;
		}
		else
		{
			ptr0->next=ptr3;
			return ptr1;
		}
	}
	else
	{
		if(ptr3==NULL)
		{
			ptr0->next->next=NULL;
			ptr0->next=ptr1;
			return head;
		}
		else
		{
			ptr0->next->next=ptr3;
			ptr0->next=ptr1;
			return head;
		}
	}
}
int main()
{
	ListNode *root=(ListNode*)malloc(sizeof(ListNode));
	root->val=1;
	root->next=(ListNode*)malloc(sizeof(ListNode));
	root->next->val=2;
	root->next->next=(ListNode*)malloc(sizeof(ListNode));
	root->next->next->val=3;
	root->next->next->next=NULL;
	reverseBetween(root,2,3);
	
}

  

 

leetcode_92题——Reverse Linked List II(链表操作)

标签:

原文地址:http://www.cnblogs.com/yanliang12138/p/4548384.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!