赞
踩
将单链表的链接顺序反转过来
- 例如:1->2->3->4->5->6->7->8->9->10
-
- 10->9->8->7->6->5->4->3->2->1
链表是以node的形式存放的
要反转,那么第一个节点的next则指向null,如:
下一个节点的next要指向第一个节点的值。如:
解法:迭代,重复某一过程,每次处理结果作为下一次处理的初始值,这些初始值类似于状态、每次处理都会改变状态、直到到达最终状态。
从前往后遍历链表,将当前节点的next指向上一个节点,因此需要一个变量存储上一个节点prev,当前节点处理完需要寻找下一个节点、因此需要一个变量保持当前节点curr,处理完后要将当前节点赋值给prev,并将next指针赋值给curr,因此需要一个变量提前保存下一个节点的指针next
逻辑步骤:
实现代码案例
- package com.hx;
-
- public class ReverseList {
-
- static class ListNode{
- int val;
- ListNode next;
-
- public ListNode(int val, ListNode next) {
- this.val = val;
- this.next = next;
- }
- }
-
- public static ListNode iterate(ListNode head) {
- ListNode prev = null, next;
- ListNode curr = head;
-
- while (curr != null) {
- next = curr.next;
- curr.next = prev;
-
- prev= curr;
- curr = next;
- }
- return prev;
- }
- }
测试验证代码
- package com.hx;
-
- public class Test {
-
- public static void main(String[] args) {
- ReverseList.ListNode node10 = new ReverseList.ListNode(10,null);
- ReverseList.ListNode node9 = new ReverseList.ListNode(9,node10);
- ReverseList.ListNode node8 = new ReverseList.ListNode(8,node9);
- ReverseList.ListNode node7 = new ReverseList.ListNode(7,node8);
- ReverseList.ListNode node6 = new ReverseList.ListNode(6,node7);
- ReverseList.ListNode node5 = new ReverseList.ListNode(5,node6);
- ReverseList.ListNode node4 = new ReverseList.ListNode(4,node5);
- ReverseList.ListNode node3 = new ReverseList.ListNode(3,node4);
- ReverseList.ListNode node2 = new ReverseList.ListNode(2,node3);
- ReverseList.ListNode node1 = new ReverseList.ListNode(1,node2);
-
- ReverseList.ListNode iterate = ReverseList.iterate(node1);
- System.out.println(iterate);
-
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。