挺简单的一道题,当初笔试还写过,简单记录一下~
链表反转1->2->3->4->null;反转后变为4->3->2->1;即null<-1<-2<-3<-4;
因此考虑反转步骤为 1) null<-1,2->3->4 2) null<-1<-2,3->4 3) null<-1-<2-<3,4 4)null<-1<-2<-3<-4
所以只需要采用while循环依次进行处理即可。
在进行处理的时候,首先确定当前结点now,拿到当前结点的next节点 (now和next均不为空)拿到next的next节点nNext(防止链表丢失),然后重新调整now和next之间的关系,调整完之后,now和next后移。
完整代码如下:
public static ListNode ReverseList(ListNode head) {
if(head==null||head.next==null) { //特殊情况处理 空链表或者单个节点直接返回
return head;
}
ListNode nowN = head; //从首元素出发
ListNode nextN = nowN.next; //下一个元素
nowN.next = null;
while(nextN!=null){
System.out.print(head.val+" "+nextN.val);
ListNode nNext = nextN.next;
//进行反转
nextN.next=head;
head = nextN;
nextN = nNext;
}
return head;
}