剑指offer

面试题5 : 从尾到头打印链表(翻转链表)

  1. public class Test05 {  
  2.     /** 
  3.      * 结点对象 
  4.      */  
  5.     public static class ListNode {  
  6.         int val; // 结点的值  
  7.         ListNode nxt; // 下一个结点  
  8.     }  
  9.   
  10.     /** 
  11.      * 输入个链表的头结点,从尾到头反过来打印出每个结点的值 
  12.      * 使用栈的方式进行 
  13.      * 
  14.      * @param root 链表头结点 
  15.      */  
  16.     public static void printListInverselyUsingIteration(ListNode root) {  
  17.         Stack<ListNode> stack = new Stack<>();  
  18.         while (root != null) {  
  19.             stack.push(root);  
  20.             root = root.nxt;  
  21.         }  
  22.         ListNode tmp;  
  23.         while (!stack.isEmpty()) {  
  24.             tmp = stack.pop();  //记忆移除stack的最后一个值
  25.             System.out.print(tmp.val + " ");  
  26.         }  
  27.     }  
  28.   
  29.     /** 
  30.      * 输入个链表的头结点,从尾到头反过来打印出每个结点的值 
  31.      * 使用栈的方式进行 
  32.      * 
  33.      * @param root 链表头结点 
  34.      */  
  35.     public static void printListInverselyUsingRecursion(ListNode root) {  
  36.         if (root != null) {  
  37.             printListInverselyUsingRecursion(root.nxt);  
  38.             System.out.print(root.val + " ");  
  39.         }  
  40.     }  
  41.   
  42.     public static void main(String[] args) {  
  43.         ListNode root = new ListNode();  
  44.         root.val = 1;  
  45.         root.nxt = new ListNode();  
  46.         root.nxt.val = 2;  
  47.         root.nxt.nxt = new ListNode();  
  48.         root.nxt.nxt.val = 3;  
  49.         root.nxt.nxt.nxt = new ListNode();  
  50.         root.nxt.nxt.nxt.val = 4;  
  51.         root.nxt.nxt.nxt.nxt = new ListNode();  
  52.         root.nxt.nxt.nxt.nxt.val = 5;  
  53.   
  54.         printListInverselyUsingIteration(root);  
  55.         System.out.println();  
  56.         printListInverselyUsingRecursion(root);  
  57.     }  
  58.   
  59. }  


运行结果:

冒泡排序(java版)

/**
 * author: Ain
 * model: write a code about bubble_sort
 * date:2016-2-18
 */
private static final int [] ARRAY_NUMBER =  {2,3,1,4,6,5};
//main程序
public static void main(String[] args) {
    //借用无返回值方法进行排序
    bubble_Sort(ARRAY_NUMBER);
    //进行循环输出
    for(int i=0;i<ARRAY_NUMBER.length;i++){
        System.out.print(ARRAY_NUMBER[i]);
    }
}
/**
 * model:write a method about bubble_sort
 * author:Ain
 * 冒泡排序:双层for循环+一层if判断
 */
public static void bubble_Sort(int[] ARRAY_NUMBER){
    //  首层循环控制:趟数
    for(int i = 0; i<ARRAY_NUMBER.length;i++){
        //二层循环控制:比较次数
        for(int j = 0;j<ARRAY_NUMBER.length-i-1;j++){
            //二层循环中if条件语句进行判断
            if(ARRAY_NUMBER[j]>ARRAY_NUMBER[j+1]){
                //进行位置交换
                int temp = ARRAY_NUMBER[j];
                ARRAY_NUMBER[j] = ARRAY_NUMBER[j+1];
                ARRAY_NUMBER[j+1] = temp;
            }
        }
    }
}

 

冒泡排序(python版)

def bubble_sort(nums):

    for in range(len(nums) - 1):  # 这个循环负责设置冒泡排序进行的次数

        for in range(len(nums) - - 1):  # j为列表下标

            if nums[j] > nums[j + 1]:

                nums[j], nums[j + 1= nums[j + 1], nums[j]

return nums

 

print(bubble_sort([453283312221997]))

总结:

冒泡排序总的平均时间复杂度为  

冒泡排序是一种稳定排序算法

选择排序(java版)

/**
 * author: Ain
 * model: write a code about bubble_sort
 * date:2016-2-18
 */
private static final int[] ARRAY_NUMBER = {231465};

//main程序
public static void main(String[] args) {
    //借用无返回值方法进行排序
    bubble_Sort(ARRAY_NUMBER);
    //进行循环输出
    for (int i = 0; i < ARRAY_NUMBER.length; i++) {
        System.out.print(ARRAY_NUMBER[i]);
    }
}

/**
 * model:write a method about bubble_sort
 * author:Ain
 * 选择排序
 */
public static void bubble_Sort(int[] ARRAY_NUMBER) {
    //类选择排序算法
    for (int i = 0; i < ARRAY_NUMBER.length 1; i++) {
        for (int j = (ARRAY_NUMBER.length 2); j >= i; j--) {
            if (ARRAY_NUMBER[j] < ARRAY_NUMBER[j + 1]) {
                int temp = ARRAY_NUMBER[j];
                ARRAY_NUMBER[j] = ARRAY_NUMBER[j + 1];
                ARRAY_NUMBER[j + 1] = temp;
            }
        }
    }
    //选择排序
    int temp;
    for(int i=0;i<ARRAY_NUMBER.length;i++){
        //内层循环j=i+1,外层循环控制着循环次数。即每趟中a[i]这个值就是本趟的最小值。i位置上是最小值
        for(int j=i+1;j<ARRAY_NUMBER.length;j++){
            if(ARRAY_NUMBER[i]>ARRAY_NUMBER[j]){
                temp=ARRAY_NUMBER[i];
                ARRAY_NUMBER[i]=ARRAY_NUMBER[j];
                ARRAY_NUMBER[j]=temp;
            }
        }
    }
}

选择排序(python版)

def selection_sort(list2):

  for in range(0len (list2)-1):

    min_ = i

    for in range(i + 1len(list2)):

      if list2[j] < list2[min_]:

        min_ = j

list2[i], list2[min_] = list2[min_], list2[i]  # swap

 

选择排序比冒泡排序快

选择排序是一个不稳定的排序算法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值