将一个节点数为 size 链表 m 位置到 n 位置之间的区间反转,用c++实现,给出完整代码
时间: 2023-03-08 07:16:45 浏览: 119
我的代码如下:struct node {
int data;
struct node *next;
}; void reverse(struct node** head_ref, int m, int n)
{
if (m == n)
return; // 找到m位置的节点
struct node* m_node = *head_ref;
int i;
for (i = 1; i < m; i++)
m_node = m_node->next; // 找到n位置的节点
struct node* n_node = m_node;
for (i = m; i < n; i++)
n_node = n_node->next; // 找到n位置之后的节点
struct node* n_next = n_node->next; // 反转m和n之间的节点
struct node* prev = n_next;
struct node* curr = m_node;
while (curr != n_next)
{
struct node* next = curr->next;
curr->next = prev;
prev = curr;
curr = next;
} // 如果m位置是头节点,则更新头节点
if (m == 1)
*head_ref = n_node;
else
{
// 否则,更新m位置的前一个节点的next指针
struct node* m_prev = *head_ref;
for (i = 1; i < m - 1; i++)
m_prev = m_prev->next;
m_prev->next = n_node;
}
}
阅读全文