思想是需要从链表表头不断反向操作,需要有两个指针指向第一个第二个结点并不断后移,还有一个辅助指针。
具体程序如下:
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 null;
ListNode p=head;
ListNode q=head.next;
ListNode r;
head.next=null;
while(q!=null){
r=q.next;
q.next=p; //一步反向操作
p=q; //p指针后移
q=r; //q指针后移
}
head=p;
return head;
}
}
单链表反转是比较经典的问题,需要仔细琢磨。