美文网首页java基础专题
数据结构专题:1.单向链表反转与排序

数据结构专题:1.单向链表反转与排序

作者: 北交吴志炜 | 来源:发表于2019-02-24 20:29 被阅读0次

有如下单向链表

static   class Node {
        int i;
        Node next;
    }

1.单向链表反转,递归

public static Node reverse(Node head){
        if(head==null||head.next==null){
            return head;
        }
        Node newHead = reverse(head.next);
        head.next.next = head;
        head.next = null;
        return newHead;
    }

递归的方式其实是从尾节点开始进行指针反转,最终递归反转到头节点

2.单向链表反转,非递归

public static Node reverse2(Node head){
        if(head==null||head.next==null){
            return head;
        }
        Node newHead = null;
        while(head!=null){
            Node tmp = head.next;
            head.next = newHead;
            newHead = head;
            head = tmp;
        }
        return newHead;
    }

非递归采用指针法,从头节点开始,依次反转,重点是又一个tmp,记录head.next,这样反转之后,可以找到之前的next节点。

3.单向链表-快排(递归)

public static void swapValue(Node a,Node b){
        int tmp = a.i;
        a.i = b.i;
        b.i = tmp;
    }

    public static Node partion(Node head,Node end){
        if(head==null||head.next==null){
            return head;
        }
        Node p =head,j = head.next;
        while(j!=end){
            if(j.i<head.i){
                p = p.next;
                swapValue(p,j);
            }
            j = j.next;
        }
        if(p!=head){
            swapValue(p,head);
        }
        return p;
    }

    public static void quickSort(Node head,Node end){
        if(head!=end) {
            Node p = partion(head, end);
            quickSort(head, p);
            quickSort(p.next, end);
        }
    }

leetCode上面148题与此相同,利用的是值交换。

相关文章

  • 数据结构专题:1.单向链表反转与排序

    有如下单向链表 1.单向链表反转,递归 递归的方式其实是从尾节点开始进行指针反转,最终递归反转到头节点 2.单向链...

  • 单向链表算法

    单向链表 反转单向链表 单链表查找倒数第k个节点 单链表递归倒序打印 单链表排序 单链表删除重复节点

  • 链表反转

    概述 链表反转是非常经典的面试题,要实现此功能,需先实现链表的数据结构。 链表类 获得单向链表方法 输出单向链表方...

  • 数据结构 - 单向链表及相关算法

    单向链表 链表常见算法 链表反转

  • 算法

    排序:排序链表:iOS单向链表数据结构、判断两个链表是否相交并找出交点求解1-100之间的所有素数/质数:http...

  • 数据结构笔记

    数据结构课程概览 ================== 1.顺序表 2.链表:单链表,单向循环链表,双链表...

  • 44_递归的思想与应用(中)

    关键词:单链表的转置、单向排序链表的合并、汉诺塔问题、全排列问题 0. 单链表的转置 1. 单向排序链表的合并 2...

  • 线性表-单向循环链表

    单向循环链表 单向循环链表示意图如下: 数据结构定义(同普通链表) 单向循环链表初始化与赋值 在上面循环遍历查找尾...

  • 常见简单算法

    1.数组 二分查找: 冒泡排序 插入排序 选择排序 快速排序 链表 链表反转 合并2个有序链表 树 前序遍历

  • 算法与数据结构知识汇总(二、链表)

    1、概念 2、链表的数据结构 单向链表的数据结构如下图: 上图数据结构为单向链表,简称单链表,该数据结构由若干个节...

网友评论

    本文标题:数据结构专题:1.单向链表反转与排序

    本文链接:https://www.haomeiwen.com/subject/zngbyqtx.html