众所周知,在链表里有大量的指针操作,而这些指针很容易出错,所以面试的时候很多面试官喜欢出链表的题,而反转链表就是一个高频题。
分析:
链表前后元素的关联就是通过指针实现的,每个链表都有一个next指针指向下一个结点,末尾的节点的next域则置NULL;
  所以我们可以考虑将节点的next指向他原先的前继
图片说明
如图,我们需要一个中间节点,来保存他的后面的节点,不然就断了
所以代码如下:

public class Solution {
    public ListNode ReverseList(ListNode head) {
if(head==null||head.next==null)
{return head;}
        ListNode pRhead=null;//反转后的头节点    
        ListNode pNode=head;//操作的节点
        ListNode pPre=null;//前继节点,初始化为null
        while(pNode!=null)
        {
            ListNode pNext=pNode.next;//中间节点,保存节点的后继的
            if(pNext==null)
                pRhead=pNode;//当后继无节点,说明遍历结束
            pNode.next=pPre;//将后继变成前驱
            pPre=pNode;//下一个的前驱就是自己
            pNode=pNext;//下一个操作
        }
return pRhead;
    }
}