1 package com.algorithm; 2 3 //输入一个链表,反转链表后,输出链表的所有元素。 4 public class ReverseListMe { 5 6 public ListNode ReverseList(ListNode head) { 7 //运行时间:36ms 占用内存:528k 8 if(head == null) { 9 return head; 10 } 11 if(head.next == null) { 12 System.out.println(head.val); 13 return head; 14 } 15 ListNode front = head;//前一个 16 ListNode back = head.next;//后一个 17 ListNode guard = back.next;//第三个 18 front.next = null;//将最后一个赋值为null 19 while(back != null) { 20 back.next = front;//把第二项的next 赋值为front 21 front = back; 22 back = guard;//将guard 赋值给front 23 if(guard != null) 24 guard = guard.next;//将guade的next赋值给guard 25 } 26 head = front; 27 while(front != null) { 28 System.out.println(front.val); 29 front = front.next; 30 } 31 return head; 32 } 33 public static void main(String[] args) { 34 ListNode la = new ListNode(1); 35 ListNode lb = new ListNode(2); 36 ListNode lc = new ListNode(3); 37 la.next = lb; 38 lb.next = lc; 39 lc.next = null; 40 new ReverseListMe().ReverseList(la); 41 } 42 /*class ListNode { 43 int val; 44 ListNode next = null; 45 ListNode(int val) { 46 this.val = val; 47 } 48 }*/ 49 }
1 ListNode pre = null; 2 ListNode next = null; 3 while (head != null) { 4 next = head.next; 5 head.next = pre; 6 pre = head; 7 head = next; 8 } 9 return pre;