NowCoderTOP12-16——持续更新ing
Posted 王嘻嘻-
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NowCoderTOP12-16——持续更新ing相关的知识,希望对你有一定的参考价值。
TOP12. 单链表的排序
public class Solution
/**
* @param head ListNode类 the head node
* @return ListNode类
*/
public ListNode sortInList (ListNode head)
// 法二: 转化为数组排序
ArrayList<Integer> nums = new ArrayList();
ListNode node = head;
// 遍历链表,将节点值加入数组
while(node != null)
nums.add(node.val);
node = node.next;
node = head;
// 对数组排序
Collections.sort(nums);
// 遍历数组
for(int i = 0; i < nums.size() ; i++)
// 将数组元素依次插入链表
node.val = nums.get(i);
node = node.next;
return head;
// 法一: 归并排序
// //链表为空或者只有一个元素,直接就是有序的
// if(head == null || head.next == null) return head;
// // 定义三个指针,快指针 fast 一次走两步,
// // 慢指针 mid 一次走一步,
// // 前驱指针 left 在慢指针前一个元素节点
// ListNode fast = head.next.next;
// ListNode mid = head.next;
// ListNode left = head;
// while(fast != null && fast.next != null)
// fast = fast.next.next;
// mid = mid.next;
// left = left.next;
//
// left.next = null;
// return Merge(sortInList(head),sortInList(mid));
//
// // 合并两段有序链表
// public ListNode Merge(ListNode head1,ListNode head2)
// // 边界条件,一个为空,返回另一个
// if(head1 == null) return head2;
// if(head2 == null) return head1;
// // 添加表头
// ListNode dummyHead = new ListNode(0);
// ListNode cur = dummyHead;
// // 两个链表都不为空,才可以进行元素的插入
// while(head1 != null && head2 != null)
// if(head1.val <= head2.val)
// cur.next = head1;
// head1 = head1.next;
// else
// cur.next = head2;
// head2 = head2.next;
//
// cur = cur.next;
//
// // 若两个链表长度不等,此时可能存在某一个链表为空的情况
// if(head1 == null) cur.next = head2;
// else cur.next = head1;
// return dummyHead.next;
TOP13. 判断一个链表是否为回文结构
public class Solution
/**
* @param head ListNode类 the head
* @return bool布尔型
*/
public boolean isPail (ListNode head)
// 如果只有一个节点,返回 true
if(head.next == null)
return true;
List<Integer> nums = new ArrayList<Integer>();
// 将链表转化为 list
while(head != null)
nums.add(head.val);
head = head.next;
// 链表转化为 list 了
int i = 0;
int j = nums.size() - 1;
while(i < j)
// 从前向后遍历,从后向前遍历,比较各个元素值是否相等
if(!nums.get(i).equals(nums.get(j))) return false;
++i;
--j;
return true;
TOP14. 链表的奇偶重排
public class Solution
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
* @param head ListNode类
* @return ListNode类
*/
public ListNode oddEvenList (ListNode head)
if(head == null || head.next == null) return head;
// 偶节点
ListNode even = head.next;
// 奇节点
ListNode odd = head;
ListNode evenHead = even;
while(even != null && even.next != null)
odd.next = even.next;
odd = odd.next;
even.next = odd.next;
even = even.next;
odd.next = evenHead;
return head;
TOP15. 删除有序链表中重复的元素-I
public class Solution
/**
* @param head ListNode类
* @return ListNode类
*/
public ListNode deleteDuplicates (ListNode head)
if(head == null || head.next == null) return head;
ListNode cur = head;
while(cur.next != null)
if(cur.val == cur.next.val)
cur.next = cur.next.next;
else
cur = cur.next;
return head;
TOP16. 删除有序链表中所有重复的元素-II
public class Solution
/**
* @param head ListNode类
* @return ListNode类
*/
public ListNode deleteDuplicates (ListNode head)
if(head == null || head.next == null) return head;
ListNode dummyHead = new ListNode(-1);
dummyHead.next = head;
ListNode cur = dummyHead;
while(cur.next != null && cur.next.next != null)
if(cur.next.val == cur.next.next.val)
int temp = cur.next.val;
while(cur.next != null && cur.next.val == temp)
cur.next = cur.next.next;
else
cur = cur.next;
return dummyHead.next;
以上是关于NowCoderTOP12-16——持续更新ing的主要内容,如果未能解决你的问题,请参考以下文章
NowCoderTOP17-22 二分查找/排序——持续更新ing