题目描述
给定一个链表,给定left和right值,要求反转链表中left-right之间的链表
题目解析
找到left的前继和right的后继,然后将left-right进行反转,然后进行拼接
ListNode *ReverseSubLink(ListNode*head,int left,int right)
{
//头结点可能被修改,那么就创建一个虚拟结点
ListNode * dummy_node = new ListNode();
dummy_node->next = head;
//需要先找到left结点的前面节点
ListNode * pre = dummy_node;
for(int i = 0;i < left-1;++i)
{
pre = pre->next;
}
ListNode * leftnode = pre->next;
//再找到right结点后面的节点
ListNode * rightnode = leftnode;
for(int i = 0;i < right-left;++i)
{
rightnode = rightnode->next;
}
ListNode * righttail = rightnode->next;
//切断left到right的子链表,
pre->next = nullptr;
rightnode->next = nullptr;
//进行反转
ReverseLink(leftnode);
//拼接
pre->next = rightnode;
leftnode->next = righttail;
return dummy_node->next;
}