题解 | #翻转链表的节点#

反转链表

http://www.nowcoder.com/practice/75e878df47f24fdc9dc3e400ec6058ca

解法参照图文教学,解法清晰.
/*
public class ListNode {
    int val;
    ListNode next = null;

    ListNode(int val) {
        this.val = val;
    }
}*/
public class Solution {
    public ListNode ReverseList(ListNode head) {
      //考虑空链表
        if(head==null) return head;

        //非空链表[只有一个节点,就不用翻转了]
        if(head.next==null) return head;

        //有多个节点就需要翻转
        ListNode current=head;//当前节点
        ListNode pre = null;//当前节点的前驱结点
        ListNode pnext = null;//当前节点的后继节点

        while(current!=null){
            pnext = current.next; //记录当前节点的后继节点
            current.next = pre; //断链,让当前节点的后继节点指向前驱节点
            //pre,current指针向后移动.
            pre = current; //前驱指针指向当前指针.
            current = pnext;//当前指向指向后继指针.
        }
        return pre;
    }
}
解法二:
利用链表的头插法来实现翻转.
 /**
     * 利用单链表的头插法实现
     * @param head
     * @return
     */
    public static ListNode Method2(ListNode head){

        //考虑空链表 和 考虑只有一个节点
        if(head==null||head.next==null) return head;

        ListNode newHead = null; //新链表的头

        ListNode p = head;
        ListNode pnext = null; //用来记录当前节点的next

        while(p!=null){
            pnext = p.next;
            p.next = newHead;
            newHead = p;
            p = pnext;
        }
        return newHead;
    }




全部评论

相关推荐

我已成为0offer的糕手:别惯着,胆子都是练出来的,这里认怂了,那以后被裁应届被拖工资还敢抗争?
点赞 评论 收藏
分享
掩卷思:这简历做的感觉好简陋啊,找个模板呗
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务