Similar Questions
思路:链表反转。
解法一:迭代。
添加头节点(推荐):不断将当前元素start插入dummy和dummy.next之间,实现反转。
1 /** 2 * Definition for singly-linked list. 3 * public class ListNode { 4 * int val; 5 * ListNode next; 6 * ListNode(int x) { val = x; } 7 * } 8 */ 9 class Solution { 10 public ListNode reverseList(ListNode head) { 11 if(head == null) return head; 12 ListNode dummy = new ListNode(0); 13 dummy.next = head; 14 ListNode pre = head, start = head.next; 15 while(start != null) { 16 pre.next = start.next; 17 start.next = dummy.next; 18 dummy.next = start; 19 start = pre.next; 20 } 21 return dummy.next; 22 } 23 }
不添加头节点:
1 /** 2 * Definition for singly-linked list. 3 * public class ListNode { 4 * int val; 5 * ListNode next; 6 * ListNode(int x) { val = x; } 7 * } 8 */ 9 class Solution { 10 public ListNode reverseList(ListNode head) { 11 ListNode p0, p1; 12 p0 = null; 13 p1 = head; 14 while(p1 != null) {//确保p1不为空 15 ListNode p2 = p1.next; 16 p1.next = p0; 17 p0 = p1; 18 p1 = p2; 19 } 20 return p0; 21 } 22 }
解法二:递归。
1 /** 2 * Definition for singly-linked list. 3 * public class ListNode { 4 * int val; 5 * ListNode next; 6 * ListNode(int x) { val = x; } 7 * } 8 */ 9 class Solution { 10 public ListNode reverseList(ListNode head) { 11 if(head == null || head.next == null) return head;//这个判断很重要 12 ListNode p1 = head.next; 13 ListNode p0 = reverseList(p1); 14 p1.next = head; 15 head.next = null; 16 return p0; 17 } 18 }
Next challenges: