《剑指offer》—— 24 反转链表

题目

输入一个链表,反转链表后,输出新链表的表头。

代码
/*
public class ListNode {
    int val;
    ListNode next = null;

    ListNode(int val) {
        this.val = val;
    }
}*/
import java.util.Stack;
public class Solution {
	    public ListNode ReverseList(ListNode head) {
        ListNode pHead = null;  //记录头指针
        ListNode pCur = head;   //第一个开始的节点,头结点
        ListNode pPre = null;   //头结点的前一个节点 null
        
        while(pCur != null){
            
            ListNode pNext = pCur.next;   //记录当前节点的下一个节点
            
            //如果当前节点的下一个节点为空,则当前节点是头结点
            if(pNext == null){
                pHead = pCur;
            }
            
            //当前节点的下一个是它原本的前一个
            pCur.next = pPre;
            
            //移动前两个指针
            pPre = pCur;
            pCur = pNext;
        }
        return pHead;
    }
   
    
    
    /*借助三个指针:记录当前节点、当前节点的前一个节点和后一个节点
	 public ListNode ReverseList(ListNode head) {
        Stack<ListNode> s = new Stack<>();

        while(head != null){
            s.push(head);
            head = head.next;
        }
        
        //记录头结点
        if(!s.isEmpty()){
            head = s.pop();
        }
       
        ListNode temp = head;
        
        while(!s.isEmpty()){
            ListNode node = s.pop();
            node.next = null;      //为什么一定要写这个
            temp.next = node;
            temp = temp.next;
        }
        return head;
    }
    */
    
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值