有时我们需要对原链表的第一个结点进行操作,苦于没有指针指向?
这时用哑结点就非常合适,简化整个代码逻辑,不用单独if else操作头结点
增删改查
如以下代码:
//哑结点,解决从一开始抛的问题
ListNode* result = new ListNode(0);
result->next = head;
ListNode* g = result;
ListNode* p = nullptr;
//找到头插法的头,即m-1
for (int i = 0; i <= m - 2; i++)
{
g = g->next;
}
//确定开始的位置g的下一个,即m,即p位置
p = g->next;
//抛m-n次,
for (int i = 1; i <= n - m; i++)
{
//记录抛的节点,p的下一个
ListNode* temp = p->next;
if (temp == nullptr)
{
break;
}
//跳过temp节点
p->next = p->next->next;
//抛到g的后面
temp->next = g->next;
g->next = temp;
}
return result->next;
提炼以下:
ListNode* result = new ListNode(0);
result->next = head;
//对原链表操作
return result->next;