博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
章三 链表
阅读量:4638 次
发布时间:2019-06-09

本文共 11063 字,大约阅读时间需要 36 分钟。

Reverse Linked List
public ListNode reverse(ListNode head) {        // write your code here        ListNode pre = null;        while (head != null) {            ListNode temp = head.next;            head.next = pre;            pre = head;            head = temp;        }        return pre;    }
View Code

2 Reverse Linked List II

public ListNode reverseBetween(ListNode head, int m , int n)    {       if (head == null || m >= n) {           return head;       }       ListNode dummy = new ListNode(0);       dummy.next = head;       head = dummy;              for (int i = 1; i < m; i++) {           if (head == null) {               return null;           }           head = head.next;       }              ListNode premNode = head;       ListNode mNode = head.next;       ListNode nNode = mNode;       ListNode postnNode = mNode.next;              for (int i = m; i < n; i++) {           if(postnNode == null) {               return null;           }           ListNode temp = postnNode.next;           postnNode.next = nNode;           nNode = postnNode;           postnNode = temp;       }              mNode.next = postnNode;       premNode.next = nNode;       return dummy.next;    }
View Code

不熟悉

3 Remove Duplicates from Sorted List

public static ListNode deleteDuplicates(ListNode head)    {         if (head == null) {            return head;        }                ListNode node = head;        while (node != null) {            if (node.next != null && node.val == node.next.val) {                node.next = node.next.next;            } else {                node = node.next;            }        }                return head;    }
View Code

不熟悉

Remove Duplicates from Sorted List II

public static ListNode deleteDuplicates(ListNode head)     {        // write your code here        if (head == null || head.next == null) {            return head;        }                ListNode dummy = new ListNode(0);        dummy.next = head;        head = dummy;                while (head.next != null && head.next.next != null) {            if (head.next.val == head.next.next.val) {                int val = head.next.val;                while (head.next != null && head.next.val == val) {                    head.next = head.next.next;                }            } else {                head = head.next;            }        }                return dummy.next;    }
View Code

don't care

Partition List

public ListNode partition(ListNode head, int x)     {        // write your code here        if (head == null) {            return head;        }                ListNode leftDummy = new ListNode(0);        ListNode rightDummy = new ListNode(0);        ListNode left = leftDummy;        ListNode right = rightDummy;                while (head != null) {            if (head.val < x) {                left.next = head;                left = head;            } else {                right.next = head;                right = head;            }            head = head.next;        }                left.next = rightDummy.next;        right.next = null;        return leftDummy.next;    }
View Code

6 Merge Two Sorted Lists

public ListNode mergeTwoLists(ListNode l1, ListNode l2)      {        ListNode dummy = new ListNode(0);        ListNode tail = dummy;        while (l1 != null && l2 != null) {            if (l1.val < l2.val) {                tail.next = l1;                l1 = l1.next;            } else {                tail.next = l2;                l2 = l2.next;            }            tail = tail.next;        }        if (l1 != null) {            tail.next = l1;        } else {            tail.next = l2;        }        return dummy.next;     }
View Code

7 Sort List

public ListNode sortList(ListNode head) {        if (head == null || head.next == null) {            return head;        }                ListNode slow = findMiddle(head);        ListNode left = sortList(slow.next);        slow.next = null;        ListNode right = sortList(head);                return mergeTwoLists(left, right);    }    ListNode findMiddle(ListNode head) {        ListNode slow = head;        ListNode fast = head.next;                while (fast != null && fast.next != null) {            fast = fast.next.next;            slow = slow;        }                return slow;    }      ListNode mergeTwoLists(ListNode l1, ListNode l2)      {        ListNode dummy = new ListNode(0);        ListNode tail = dummy;        while (l1 != null && l2 != null) {            if (l1.val < l2.val) {                tail.next = l1;                l1 = l1.next;            } else {                tail.next = l2;                l2 = l2.next;            }            tail = tail.next;        }        if (l1 != null) {            tail.next = l1;        } else {            tail.next = l2;        }        return dummy.next;     }
View Code  error
public ListNode sortList(ListNode head) {        if (head == null || head.next == null) {            return head;        }                ListNode slow = findMiddle(head);        ListNode left = sortList(slow.next);        slow.next = null;        ListNode right = sortList(head);                return mergeTwoLists(left, right);    }    ListNode findMiddle(ListNode head) {        ListNode slow = head;        ListNode fast = head.next;                while (fast != null && fast.next != null) {            fast = fast.next.next;            slow = slow.next;        }                return slow;    }      ListNode mergeTwoLists(ListNode l1, ListNode l2)      {        ListNode dummy = new ListNode(0);        ListNode tail = dummy;        while (l1 != null && l2 != null) {            if (l1.val < l2.val) {                tail.next = l1;                l1 = l1.next;            } else {                tail.next = l2;                l2 = l2.next;            }            tail = tail.next;        }        if (l1 != null) {            tail.next = l1;        } else {            tail.next = l2;        }        return dummy.next;     }
View Code

8 Reorder List

public void reorderList(ListNode head) {          if (head == null || head.next == null) {            return;        }                ListNode mid = findMiddle(head);        ListNode tail = reverse(mid.next);        mid.next = null;        merge(head, tail);    }    ListNode findMiddle(ListNode head) {        ListNode slow = head;        ListNode fast = head.next;                while (fast != null && fast.next != null) {            fast = fast.next.next;            slow = slow.next;        }                return slow;    }    ListNode reverse(ListNode head) {        // write your code here        ListNode pre = null;        while (head != null) {            ListNode temp = head.next;            head.next = pre;            pre = head;            head = temp;        }        return pre;    }     void merge(ListNode l1, ListNode l2)      {        ListNode dummy = new ListNode(0);        ListNode tail = dummy;        int index = 0;                while (l1 != null && l2 != null) {            if (index % 2 == 0) {                tail.next = l1;                l1 = l1.next;            } else {                tail.next = l2;                l2 = l2.next;            }            tail = tail.next;            index++;        }        if (l1 != null) {            tail.next = l1;        } else {            tail.next = l2;        }     }
View Code

9 Remove Nth Node From End of List

ListNode removeNthFromEnd(ListNode head, int n)     {        if (n <= 0) {            return head;        }                ListNode dummy = new ListNode(0);        dummy.next = head;                ListNode preDelete = dummy;        for(int i = 0; i < n; i++) {            if (head == null) {                return null;            }            head = head.next;        }                while (head != null) {            preDelete = preDelete.next;            head = head.next;        }                preDelete.next = preDelete.next.next;        return dummy.next;    }
View Code

10 Linked List Cycle

public boolean hasCycle(ListNode head) {          if (head == null) {            return false;        }                ListNode fast = head.next;        ListNode slow = head;                while (fast != null && fast.next != null) {            fast = fast.next.next;            slow = slow.next;            if (fast == slow) {                return true;            }        }        return false;    }
View Code

11 Linked List Cycle II

public ListNode detectCycle(ListNode head)     {                  ListNode slow = head;          ListNode fast = head;        boolean hasCycle = false;                while (fast != null && fast.next != null) {            fast = fast.next.next;            slow = slow.next;            if (fast == slow) {                hasCycle = true;                break;            }        }                if (!hasCycle) {            return null;        }                fast = head;        while (fast != slow) {            fast = fast.next;            slow = slow.next;        }                return fast;    }
View Code

12 Merge k Sorted Lists

private Comparator
ListNodeComparator = new Comparator
() { public int compare(ListNode left, ListNode right) { return left.val - right.val; } }; public ListNode mergeKLists(List
lists) { if (lists == null || lists.size() == 0) { return null; } Queue
heap = new PriorityQueue
(lists.size(), ListNodeComparator); for (int i = 0; i < lists.size(); i++) { if (lists.get(i) != null) { heap.add(lists.get(i)); } } ListNode dummy = new ListNode(0); ListNode tail = dummy; while (!heap.isEmpty()) { ListNode node = heap.poll(); tail.next = node; tail = node; if (node.next != null) { heap.add(node.next); } } return dummy.next; }
View Code

13 Convert Sorted List to Balanced BST

public TreeNode sortedListToBST(ListNode head)     {          // write your code here        if (head == null)        {            return null;        }        int count = 0;        ListNode cur = head;        while (cur != null)        {            cur = cur.next;            count++;        }        ArrayList
list = new ArrayList
(); list.add(head); return helper(list, 0, count - 1); } public TreeNode helper(ArrayList
list, int l, int r) { if (l > r) { return null; } int m = (l + r) / 2; TreeNode left = helper(list, l, m - 1); TreeNode root = new TreeNode(list.get(0).val); root.left = left; list.set(0, list.get(0).next); root.right = helper(list, m + 1, r); return root; }
View Code

 

转载于:https://www.cnblogs.com/whesuanfa/p/7435392.html

你可能感兴趣的文章
大四了,转换到工作模式,总结一下自己
查看>>
matlab中的常用的函数——在稀疏表示中学习到的
查看>>
swift 语法中容易出的问题
查看>>
jade和ejs两者的特点
查看>>
HDU 1872:稳定排序
查看>>
2017秋-软件工程第四次作业(3)-四则运算出题
查看>>
二进制 中 1 的 个数
查看>>
Poj 2092 Grandpa is Famous(基数排序)
查看>>
什么是Dojo?与Jquery宏观对比,结果如何?
查看>>
Symfony2学习笔记之HTTP Cache
查看>>
Symfony2学习笔记之事件分配器
查看>>
Xstream序列化实体
查看>>
F#新Bug,小心! module 里的泛型变量。
查看>>
2017.5.22 git
查看>>
[转载]网站分析的最基本度量(7)——Impression,Click和CTR
查看>>
信号调理-电平调整
查看>>
delphi 使用自定义HANDLE处理消息
查看>>
ASP.NET中的常用快捷键
查看>>
poj 3034 动态规划
查看>>
联合体
查看>>