单链表练习1--去重
来源:互联网 发布:巨龙软件工程有限公司 编辑:程序博客网 时间:2024/06/05 00:38
在进行单链表去重之前,我们先来考虑一下,数组如何就地去重。
我们可以很容易的编写出这样的代码:
如果通过正向遍历来删除的话,就要注意控制遍历的长度。
function arrRemoveRepeatFront(arr) {for(var i=0; i<arr.length; ++i) {if(arr.indexOf(arr[i]) < i) {arr.splice(i, 1);i--; // 保留前面遇到的元素,删除后面遇到的重复元素}}return arr;}console.log(arrRemoveRepeatFront([1, 2, 2, 2, 3, 3, 4, 3]))console.log(arrRemoveRepeatFront([1]))
如果我们从数组尾部开始遍历,不用担心数组长度的改变。比较好理解
function arrRemoveRepeatBack(arr) {var index = arr.length - 1;while(index >= 0) {if(arr.indexOf(arr[index]) < index) {arr.splice(index, 1);}index--; // 注意看index 是在if里面还是外面。}return arr;}
好,我们借鉴上面的思路,
function LinkedList() {var Node = function (element) {this.element = element;this.next = null;}var head = null; // keep the head pointervar length = 0; // keep the length of linked listthis.append = function (element) {var new_node = new Node(element);if(head == null) {head = new_node;}else {var current = head;while(current.next != null) {current = current.next;}current.next = new_node;}length++;}this.insert = function (position, element) {var new_node = new Node(element);if(position <= 0) {new_node.next = head;head = new_node;length++;return;}if(position > this.size() -1) {this.append(element);return;}var current = head;for(var i=1; i<position; ++i) {current = current.next;}new_node.next = current.next;current.next = new_node;length++;}this.remove = function (element) {var index = this.indexOf(element);if(index == -1) {return;}this.removeAt(index);}this.removeAt = function (position) {if(position < 0 || position > this.size() - 1) {throw new Error("Array index exceeds");}if(position == 0) {head = head.next;} else {var current = head;for(var i=1; i<position; ++i) {current = current.next;}current.next = current.next.next;}length--;}this.indexOf = function (element) {var current = head;var cnt = -1;while(current != null) {cnt++;if(current.element == element) {return cnt;}current = current.next;}return - 1;}this.size = function () {return length;}this.getHead = function () {return head;}this.print = function () {var current = head;var arr = []while(current != null) {arr.push(current.element);current = current.next;}console.log(arr.join(", "));}}/*删除重复的数据节点*/function removeRepeat(linked_list) {var current = linked_list.getHead();var index;var cnt = -1;while(current != null) {cnt++;index = linked_list.indexOf(current.element);if(index < cnt) {linked_list.removeAt(index);cnt--;}current = current.next;}return linked_list;}/*测试函数*/function test(arr) {var link_list = new LinkedList();for(var i=0; i<arr.length; ++i) {link_list.append(arr[i]);}return link_list;}var arr = [10, 20, 20, 20, 30, 30, 40, 40, 50, 40];var result = test(arr);result.print();var result_no_repeat = removeRepeat(result);result_no_repeat.print();
阅读全文
0 0
- 单链表练习1--去重
- ArrayList练习 ,去重
- java练习——数组去重
- Leetcode练习<十> 列表元素去重
- MR练习之uid的去重
- 单链表的应用1(去重)
- 算法练习:两指针之有序数组去重
- 练习--hive查询实例和Shell去重
- [python]学习笔记4-关于列表去重练习
- GEEK编程练习— —数组去重
- MapReduce练习一(计数,去重,排序,平均成绩)
- 单链表的合并【去重】
- rqnoj 1 去重+排序
- 去重
- 去重
- 去重
- 去重
- 去重
- < 笔记 > Java SE
- 数据库订单数据读取到前端展示
- Django 之ORM
- 百度搜狗等搜索引擎智能提示(JSONP跨域实现自动补全搜索建议)
- java泛型推断从java6到java8的变化
- 单链表练习1--去重
- Kali Linux:Cannot Log In Account
- linux 常见文件处理命令
- 织梦DedeCMS提示信息框的修改,修改ShowMsg方法函数
- Linux 安装python3
- 耶鲁大学的心态 ,送给正在奋斗的人!
- hdu 1078 FatMouse and Cheese
- 用 队列 打印 杨辉三角
- [BZOJ]4819: [Sdoi2017]新生舞会 01分数规划+费用流