理解常见数据结构算法
链表
1.理解链表反转的过程
public ListNode reverse(ListNode listNode){
// pre可以理解成一个新链表
ListNode pre = null;
// 整个反转的过程可以理解为:将原链表cur拆开,组成新链表pre
ListNode cur = listNode;
// 新链表cur拆完,反转后的链表pre也就生成了
while(cur != null){
// 将cur的头节点“拆”下,同时用next保存剩余链表
ListNode next = cur.next;
// 用“拆”下的cur头节点组合新链表pre
cur.next = pre;
pre = cur;
// 继续“拆”
cur = next;
}
return pre;
}
初次理解上面这段链表反转的代码颇费了一些脑力。后来把反转一个链表的过程看成“拆开”+“重组”的过程就好理解了(其实就是cur出栈,然后pre入栈的过程,最后的pre和原来的cur方向相反):把原链表cur拆开,然后重组成为新链表pre。