题目
翻转一个链表
样例
给出一个链表1->2->3->null,这个翻转后的链表为3->2->1->null
挑战
在原地一次翻转完成
解题思路
翻转链表,顾名思义,将链表从最后一个节点指向前面的节点。
思路是遍历链表,然后每一个节点的下一个节点,指向前面的节点。
先完成一个操作 1->2 变成 2->1
需要注意:
如果直接把2->的元素变为1,那原本2->的元素将丢失。
故需要先保存2->的节点再进行此操作。
另外还需要一个元素记录前一个节点,即是每循环一步生成的新链表的头部。
代码实现
/**
* @param head: The head of linked list.
* @return: The new head of reversed linked list.
*/
public ListNode reverse(ListNode head) {
if(head == null)
return null;
ListNode p = head;
ListNode next = null;
ListNode pre = null;
while(p != null)
{
next = p.next;
p.next = pre;
pre = p;
p = next;
}
return pre;
}