输入一个链表,反转链表后,输出新链表的表头。输入{1,2,3},输出{3,2,1}.
java题解:该题很明显考察的是怎么调整链表的指针,来达到我们想要的目的。
1. 反转后的链表应该为最后一个结点指向倒数第二个,倒数第二个指向倒数第三个,......,
第二个指向第一个,第一个指向null。
2. 现在就是需要调整每个结点的next指针。
调整过程需要两个指针辅助:
pre记录其前一个结点位置,好让该结点的next指针指向前一个结点,但是在指向前一个结点前需要用一个指针tem记录后一个结点地址,避免结点丢失。
以head节点为例:
1.反转后的head指向为null,所以未反转的时候其前一个结点应该是null,初始化pre指针为null;
2.用tem指针记录head的下一个结点head.next;
3.从链表上摘下head,即让head.next指向pre;
4.此时已完成head结点的摘取及与与一个节点的连接,则我们需要操作下一个结点:故需移动pre和head,让pre指向head,head指向下一个节点。
以此类推,直到走完所有节点也就是head指向null时循环结束。
解题如下:
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
public class Solution {
public ListNode ReverseList(ListNode head) {
//用于记录当前节点的前一个节点
ListNode pre =null;
//用于记录后一个节点
ListNode tem=null;
while(head!=null){
//记录当前节点后一个节点
tem=head.next;
//将后一个节点指向前一个节点
head.next=pre;
//pre节点前移至当前节点
pre=head;
//head节点指向原本保存的后一个节点
head=tem;
}
return pre;
}
}