算法基础~链表【将链表逆序题(不可申请额外的空间)~头插法】

算法只基础~链表

1,基本知识:

struct ListNode{
     int val;          //存储元素的数据域
     ListNode * next; //存储下一个结点地址的指针域 
}    

2,简单例题【将链表逆序题(不可申请额外的空间)~头插法】

先看代码,再分析整个过程【so easy】

public class Solution {
    public ListNode* reverseList(ListNode* head){
        ListNode* new_head = NULL;  //指向新链表头结点的指针
        while(head){
            ListNode *next = head->next;
            head->next = new_head;
            new_head = head;
            head = next;
        }
        return new_head;    //返回新链表头结点
    }
}

(1) 定义了一个新头指针 。     why?~ 看后边解析(1)

(2) 定义一个指向原来链表head的下一个结点的指针next。  why?~ 看后边解析(2)

先看思路过程,最后再解释why?

 解释

(1)定义一个新头指针~链表的核心点就是头指针啦,通过头指针的next移动(获取当前结点位置)遍历完整个链表,so,头指针就是一个链表的象征

(2)定义一个指向原来链表head的下一个结点的指针next~因为第一个过程head指在1这个结点,head位置需要指向2这个结点然后开始第二个该过程,so,

next指针指向head的下个结点的作用,即标志到2这个结点的位置。

原文地址:https://www.cnblogs.com/shan333/p/15032539.html