对于初学者可以先查看这篇文章
[链表简介] https://www.jianshu.com/p/77094acaa897
一.介绍
链表反转顾名思义就是调换链表的顺序,例如1->2->3->4->null 反转后的链表为 4->3->2->1->null
二.题解
这道题的解法很多,例如可以通过遍历链表,将数据插入栈然后遍历构建新的链表,但这种方式会借助额外的空间,本次只讲解通过变换指针的方式来实现,这种方式也是这道题的考察要点,废话不说,直接开始。
首先我们大部分人一定都知道三个数如何调换顺序,见图1所示:
图1
而这里的链表反转也是借助了这种思想,只是这里替换为每3个节点的替换,具体的见图2所示:
图2三.java代码
public class LinkListReverse {
public static void Traverse_recursive(ListNode head){
while (head!=null){
System.out.println(head.val);
head = head.next;
}
}
public static void main(String[] args) {
ListNode head = new ListNode(1,new ListNode(2,new ListNode(3,new ListNode(4,new ListNode(5)))));
System.out.println("翻转前");
Traverse_recursive(head);
ListNode l = Reverse(head);
System.out.println("翻转后");
Traverse_recursive(l);
}
public static ListNode Reverse(ListNode head){
ListNode pre = null;
ListNode cur = head;
while (cur != null){
ListNode tmp = cur.next;
cur.next = pre;
pre = cur;
cur = tmp;
}
return pre;
}
}
网友评论