【考点:代码的鲁棒性】反转链表
题目描述
输入一个链表,反转链表后,输出链表的所有元素。
解题思路
三个指针,pre、head和next,每次让【head指向的节点】指向【pre指向的节点】,然后遍历,即可完成。
解题代码
/*
public 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 pre = null;
ListNode next = head.next;
while(head != null) {
//反转当前节点的指向
head.next = pre;
//移动指针
pre = head;
head = next;
//保存下一个遍历节点
if(head != null)
next = head.next;
}
return pre;
}
}
当然,为了看起来优雅一点,上面的代码可以稍微调整一下
public class Solution {
public ListNode ReverseList(ListNode head) {
if(head == null) return null;
ListNode pre = null;
ListNode next = null;
while(head != null) {
//反转当前节点的指向
next = head.next;
head.next = pre;
//移动指针
pre = head;
head = next;
}
return pre;
}
}
更多算法解答请点击
《剑指offer》66题JAVA代码算法实现全集