leetcode刷题:反转链表I

1.题目
leetcode刷题:反转链表I_第1张图片

分析:leetcode刷题:反转链表I_第2张图片
leetcode刷题:反转链表I_第3张图片
leetcode刷题:反转链表I_第4张图片
leetcode刷题:反转链表I_第5张图片
代码如下:

//迭代反转法,head 为无头节点链表的头指针
link * iteration_reverse(link* head) {
    if (head == NULL || head->next == NULL) {
        return head;
    }
    else {
        link * beg = NULL;
        link * mid = head;
        link * end = head->next;
        //一直遍历
        while (1)
        {
            //修改 mid 所指节点的指向
            mid->next = beg;
            //此时判断 end 是否为 NULL,如果成立则退出循环
            if (end == NULL) {
                break;
            }
            //整体向后移动 3 个指针
            beg = mid;
            mid = end;
            end = end->next;
        }
        //最后修改 head 头指针的指向
        head = mid;
        return head;
    }
}

头插法

leetcode刷题:反转链表I_第6张图片
leetcode刷题:反转链表I_第7张图片

link * head_reverse(link * head) {
    link * new_head = NULL;
    link * temp = NULL;
    if (head == NULL || head->next == NULL) {
        return head;
    }
    while (head != NULL)
    {
        temp = head;
        //将 temp 从 head 中摘除
        head = head->next;

        //将 temp 插入到 new_head 的头部
        temp->next = new_head;
        new_head = temp;
    }
    return new_head;
}

你可能感兴趣的:(leetcode刷题,leetcode,链表,算法)