/**
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param head ListNode类
* @param m int整型
* @param n int整型
* @return ListNode类
*/
struct ListNode* reverseBetween(struct ListNode* head, int m, int n ) {
// write code here
int i = 1;
struct ListNode* back;
struct ListNode* p;
struct ListNode* q;
struct ListNode* forward;
if(head == NULL || head->next == NULL || m == n)
{
return head;
}
// 初始化
back = head;
p = head;
while(p != NULL)
{
if(i < m)
{
back = p;
}
if(i == n)
{
q = p;
break;
}
p = p->next;
i++;
}
// 如果要交换的是第一个节点
p = back->next;
if(m==1)
{
back->next = q->next;
q->next = back;
head = q;
}
else
{
back->next = q;
}
while(p != q)
{
forward = p->next;
p->next = q->next;
q->next = p;
p = forward;
}
return head;
}
题解 | #链表内指定区间反转#
最新推荐文章于 2023-02-25 12:03:57 发布