反转链表
众所周知,在链表里有大量的指针操作,而这些指针很容易出错,所以面试的时候很多面试官喜欢出链表的题,而反转链表就是一个高频题。
分析:
链表前后元素的关联就是通过指针实现的,每个链表都有一个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; } }