将一个链表反转输出,链表没有head结点。
思路
因为没有头节点,不能用头插法来实现反转,但可以采用差不多的思想。
ListNode的结构
public class ListNode {
int val;
ListNode next = null;
public ListNode(int val) {
this.val = val;
}
}
算法具体代码
public ListNode ReverseList(ListNode head) {
ListNode front, nextNode;
if (head == null) {
return null;
}
front = head;
while (head.next != null) {
nextNode = head.next;
head.next = nextNode.next;
nextNode.next = front;
front = nextNode;
}
return front;
}
代码中利用了nextNode来存储当前结点的下一个结点,已经新的头节点front。
假设输入的链表为1 -> 2 -> 3 -> 4 -> 5
,那么head结点和front结点的值为1,经过head.next = nextNode.next
之后,head结点的下一个结点由2变为了3,nextNode.next = front
,链表就变为了2 -> 1-> 3 -> 4 -> 5
,再修改front结点为2。这样经过一次遍历,链表反转就完成了。