zoukankan      html  css  js  c++  java
  • 剑指offer 面试题16 反转链表

    反转链表

    题目:

      定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点。链表结点定义如下:

    struct ListNode {
        int  m_nKey;
        ListNode  *m_pNext;  
    };

    分析

      1.反转过程中,应该保存当前反转结点后的那个结点的地址,返回链表断链。如图

    代码

    import java.util.ArrayList;
    
    public class OperateList {
    
        public static void main(String[] args) {
    
            ListNode root = new ListNode(1);
            ListNode temp = root;
    
            // 初始化链表
            for (int i = 2; i < 4; i++) {
                temp.next = new ListNode(i);
                temp = temp.next;
            }
            temp = root;
            System.out.println("======反转之前的状态=========");
            while (temp != null) {
                System.out.println(temp.val);
                temp = temp.next;
            }
            root = new OperateList().printListFromTailToHead(root);
            System.out.println("=======反转之后的状态=========");
            while (root != null) {
                System.out.println(root.val);
                root = root.next;
            }
        }
    
        /**
         * 输入参数为链表头结点,作用为:反转该链表,并返回反转后的链表的头结点
         * @param listNode
         * @return
         */
        public ListNode printListFromTailToHead(ListNode listNode) {

        if (listNode == null)
          return null;

            ListNode ln1 = listNode;//记录当前访问结点的前一个结点的应用
            ListNode ln2 = listNode.next; //记录当前访问结点
            ln1.next = null;
    
            //记录当前访问结点的后面那个结点,用于保存它的引用,防止反转过程中“断链”。
            ListNode temp = null;
            while (ln2 != null) {
                temp = ln2.next;
                ln2.next = ln1;
                ln1 = ln2;
                ln2 = temp;
            }
            return ln1;
        }
    }
    
    class ListNode {
        int val;
        ListNode next = null;
    
        ListNode(int val) {
            this.val = val;
        }
    }

    代码为小弟的思路,如果各位路过的大神有更好的思路,请在评论中告知小弟,非常感谢!

    加油
  • 相关阅读:
    第二次作业循环语句
    c语言01次作业分支,顺序结构
    PAT 1027. Colors in Mars
    PAT 1026 Table Tennis
    PAT 1035 Password
    PAT 1038. Recover the Smallest Number
    PAT 1028 List Sorting (25)
    PAT 1041 Be Unique (20)
    PAT 1025 PAT Ranking
    1037. Magic Coupon
  • 原文地址:https://www.cnblogs.com/boothsun/p/4838213.html
Copyright © 2011-2022 走看看