反转链表----双指针

          1—>2—>3—>4—>5—>null       

          null—>5—>4—>3—>2—>1

第一步:p=head.next        (newhead->null        head->1        p->2)

第二步:(改变指针方向)

        head.next=newhead      (newhead->null        head->1        p->2)

        (null<—1    2—>3—>4—>5—>null)

第三步:(暂存newhead的头节点)

        newhead=head        (newhead->1     head->1        p->2)

第四步:(head指向原链表的下一个节点)

        head=p        (newhead->1     head->2        p->2)

/**
 * Definition for singly-linked list.
 * function ListNode(val) {
 *     this.val = val;
 *     this.next = null;
 * }
 */
/**
 * @param {ListNode} head
 * @return {ListNode}
 */
var reverseList = function(head) {//head头节点指针
    let newhead=null;
    let p=null;//用于暂存节点
    while(head){
       p=head.next;//暂存后继节点,便于稍后改变指针方向时能找到原链表
       head.next=newhead;//反转指针方向
       newhead=head;//暂存当前的节点
       head=p;//访问下一节点
    }
    return newhead;
};

输入:  1—>2—>3—>4—>5—>null     

输出: null—>5—>4—>3—>2—>1

上一篇:com.xu.struct.IfDemo03


下一篇:281 Android基本布局之3—表格布局(计算器案例布局实现)