链表
来源:互联网 发布:hip2p 网络摄像机 编辑:程序博客网 时间:2024/05/26 08:42
环形链表插值问题
题目:
有一个整数val,如何在节点值有序的环形链表中插入一个节点值为val的节点,并且保证这个环形单链表依然有序。
给定链表的信息,及元素的值A及对应的nxt指向的元素编号同时给定val,请构造出这个环形链表,并插入该值。
测试样例:
[1,3,4,5,7],[1,2,3,4,0],2
返回:{1,2,3,4,5,7}
代码:
import java.util.*;/*public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}*/public class InsertValue { public ListNode insert(int[] A, int[] nxt, int val) { //特殊情况判定 if(A==null||A.length==0){ ListNode curNode = new ListNode(val); curNode.next = curNode; return curNode; } ListNode head = new ListNode(A[0]); ListNode tail = head; for(int i=0;i<nxt.length;i++){ ListNode curNode = null; if(nxt[i]==0){ curNode = head; }else{ curNode = new ListNode(A[nxt[i]]); tail.next = curNode; tail = curNode; } } tail.next = head; //循环比较值 ListNode curNode = new ListNode(val); if(val<=head.val){ curNode.next = head; tail.next = curNode; return curNode; } ListNode preNode = head; ListNode nextNode = preNode.next; while(val>nextNode.val&&nextNode.next!=head){ preNode = nextNode; nextNode = preNode.next; } curNode.next = nextNode; preNode.next = curNode; return head; }}
链表的分化问题
题目:
对于一个链表,我们需要用一个特定阈值完成对它的分化,使得小于等于这个值的结点移到前面,大于该值的结点在后面,同时保证两类结点内部的位置关系不变。
给定一个链表的头结点head,同时给定阈值val,请返回一个链表,使小于等于它的结点在前,大于等于它的在后,保证结点值不重复。
测试样例:
{1,4,2,5},3
{1,2,4,5}
代码:
import java.util.*;/*public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}*/public class Divide { public ListNode listDivide(ListNode head, int val) { //边界条件讨论 if(head==null||head.next==null){ return head; } //将链表与val循环比较,分成两部分,小于等于的组成一个链表,大于的组成另一个链表,然后最后将这两个链表链接起来即可 ListNode minHead = null; ListNode minTail = null; ListNode maxHead = null; ListNode maxTail = null; ListNode temp = null; while(head!=null){ //定义一个临时节点,保存head的next引用 temp = head.next; //将head的next设为空 head.next = null; if(head.val<=val){ if(minHead==null){ minHead = head; minTail = head; }else{ minTail.next = head; minTail = head; } }else{ if(maxHead==null){ maxHead = head; maxTail = head; }else{ maxTail.next = head; maxTail = head; } } head = temp; } //小链表不为空,返回小链表的头部,否则返回大链表的头部 if(minHead!=null){ minTail.next = maxHead; return minHead; }else{ return maxHead; } }}
链表指定值清除
题目:
现在有一个单链表。链表中每个节点保存一个整数,再给定一个值val,把所有等于val的节点删掉。
给定一个单链表的头结点head,同时给定一个值val,请返回清除后的链表的头结点,保证链表中有不等于该值的其它值。请保证其他元素的相对顺序。
测试样例:
{1,2,3,4,3,2,1},2
{1,3,4,3,1}
代码:
import java.util.*;/*public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}*/public class ClearValue { public ListNode clear(ListNode head, int val) { // write code here if(head==null){ return head; } while(head!=null&&head.val==val){ head = head.next; } ListNode node = head; while(node.next!=null){ if(node.next.val==val){ node.next = node.next.next; }else{ node = node.next; } } return head; }}
阅读全文
0 0
- 链表
- 链表
- 链表
- 链表
- 链表
- 链表
- 链表
- 链表
- 链表
- 链表
- 链表
- 链表
- 链表
- 链表
- 链表
- 链表
- 链表
- 链表
- LRC歌词解析
- More Python
- Spring:SAXParseException
- JavaScript 的原型链
- lintcode--最长单词
- 链表
- Light---一个物体阴影的影响要素
- null
- POJ2106 Boolean Expressions / Openjudge Boolean Expressions (递归)全局题号1108
- C++连接CTP接口实现简单量化交易(行情、交易、k线、策略)
- JSON.stringify()技巧
- [kuangbin带你飞]专题二 搜索进阶 G
- CodeForces Round 427 div2
- wiki