struct Node *rollback_LinkList_range(struct Node *head, Elemtype x, Elemtype y)
{
if (head == NULL || head->next == NULL || x >= y)
{
return head;
}
struct Node dummy; // 哨兵节点
dummy.next = head;
struct Node *pre = &dummy;
for (int i = 0; i < x - 1; i++)
{
pre = pre->next;
}
struct Node *start = pre->next;
struct Node *curr = start->next;
for (int i = x; i < y; i++)
{
start->next = curr->next;
curr->next = pre->next;
pre->next = curr;
curr = start->next;
}
return dummy.next;
}
-
使用双指针法来进行链表的遍历和反转,可以将遍历和反转过程合并为一次循环。这样可以将链表的遍历和反转部分的时间复杂度从 O(n) 降低到 O(n/2)。
-
使用迭代的方法进行链表的反转,这样可以避免递归调用带来的额外开销,同时也能降低时间复杂度。
-
使用哨兵节点简化边界条件的处理,可以减少对特殊情况的单独处理,提高代码的简洁性和执行效率。