Reverse a linked list.
For linked list 1->2->3, the reversed linked list is 3->2->1
Reverse it in-place and in one-pass
用两个指针可以做到。这种链接的在纸上先用图形+语句画好很有帮助。
/** * Definition for ListNode. * public class ListNode { * int val; * ListNode next; * ListNode(int val) { * this.val = val; * this.next = null; * } * } */ public class Solution { /* * @param head: n * @return: The new head of reversed linked list. */ public ListNode reverse(ListNode head) { // write your code here if (head == null){ return null; } if (head.next == null){ return head; } ListNode first = head; ListNode second = head.next; ListNode res = null; first.next = null; while(second != null){ ListNode temp = second.next; second.next = first; first = second; second = temp; } return first; } }
网上看到的精简实现版:
直接免去了我额外创新指针,head也拿来用,且巧妙自我化解开头的非法输入问题。
public class Solution { /** * @param head: The head of linked list. * @return: The new head of reversed linked list. */ public ListNode reverse(ListNode head) { ListNode prev = null; while (head != null) { ListNode temp = head.next; head.next = prev; prev = head; head = temp; } return prev; } }