从单链表中删除最大的元素,单链表元素排序

public class LinkList {

	public Node head;
	public LinkList() {
		head = new Node();
		head.next = null;
	}

	//尾插法
	public void createByTail(int[] arr, int n) {
		Node tail = head;
		for(int i=0; i<n; i++) {
			Node c = new Node(arr[i]);
			tail.next = c;
			tail = c;
		}
		tail.next = null;
	}

	//头插法
	public void createByHead(int[] arr, int n) {
		head.next = null;
		for(int i=0; i<n; i++) {
			Node c = new Node(arr[i]);
			c.next = head.next;
			head.next = c;
		}
	}

	public void display() {
		Node p = head.next;
		while(p != null) {
			if(p.next != null)
				System.out.print(p.data + "->");
			else
				System.out.println(p.data);
			p = p.next;
		}
	}

	//删除单链表中元素最大的节点
	public void delMaxNode() {
		Node p = head.next, pre = head, maxp = head.next, maxpre = head;
		while(p != null) {
			if(p.data > maxp.data) {
				maxp = p;
				maxpre = pre;
			}
			pre = p;
			p = p.next;
		}
		maxpre.next = maxp.next;
        display();
	}

	//单链表元素排序
	public void sort() {
		Node p = head.next.next;
		head.next.next = null;
		Node q, pre;
		while(p != null) {
			q = p.next;
			pre = head;
			while(pre.next != null && pre.next.data < p.data) {
				pre = pre.next;
			}
			p.next = pre.next;
			pre.next = p;
			p = q;
		}
		display();
	}

	public static void main(String[] args) {
		int[] arr = new int[]{5,6,1,6,9,3,7,8};
		LinkList list = new LinkList();
		list.createByHead(arr, arr.length);
		list.display();
		list.createByTail(arr, arr.length);
		list.display();
		list.delMaxNode();
		list.sort();

	}

}
class Node {
	public int data;
	public Node next;
	public Node(){}
	public Node(int data) {
		this.data = data;
	}
}

结果:

8->7->3->9->6->1->6->5
5->6->1->6->9->3->7->8
5->6->1->6->3->7->8
1->3->5->6->6->7->8
时间: 2024-10-07 11:54:00

从单链表中删除最大的元素,单链表元素排序的相关文章

【LeetCode-面试算法经典-Java实现】【082-Remove Duplicates from Sorted List II(排序链表中删除重复元素II)】

[082-Remove Duplicates from Sorted List II(排序链表中删除重复元素II)] [LeetCode-面试算法经典-Java实现][所有题目目录索引] 原题 Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numbers from the original list. For example, Given 1->2->

【LeetCode-面试算法经典-Java实现】【083-Remove Duplicates from Sorted List(排序的单链表中删除重复的结点)】

[083-Remove Duplicates from Sorted List(排序的单链表中删除重复的结点)] [LeetCode-面试算法经典-Java实现][所有题目目录索引] 原题 Given a sorted linked list, delete all duplicates such that each element appear only once. For example, Given 1->1->2, return 1->2. Given 1->1->2

从无头单链表中删除节点

1.从无头单链表中删除节点 一个没有头指针的单链表.一个指针指向此单链表中间的一个节点(不是第一个也不是最后一个节点).将该节点删除. A-->B-->C-->D       =====>     A-->C-->D 问题解析:由于只能单向遍历,故与删除B节点,无法得知B的前驱A,即无法像普通删除中那样让A的next指向C; 这里有个技巧,将C当做B,而B复制成C,则删除C节点即可: 2.给定一个链表的头指针,要求只遍历一次,将单链表中的元素顺序反转过来. A-->

javascript中的链表结构—从链表中删除元素

1.概念 上一个博文我们讲到链表,其中有一个方法remove()是暂时注释的,这个方法有点复杂,需要添加一个Previous()方法找到要删除的元素的前一个节点,这一个博文我们来分析一下这个remove()方法. 从链表中删除节点的时候,需要先找到这个待删除节点的前面的节点.找到这个节点之后修改它的next属性,使其指向待删除节点的下一个节点,这样就把待删除节点给删除了,是不是很简单呢?但是问题来了,我们是不是要找到待删除节点的前面一个节点呢?这样就需要添加一个findPrevious()方法来

编程之美:从无头单链表中删除节点,讨论

1.问题描述 假设有一个没有头指针的单链表.一个指针指向此单链表中间的一个节点(不是第一个,也不是最后一个),请将该节点从单链表中删除. 如下图所示: 这种情况大家都知道,将下一个节点的data和next拷贝到当前节点,并将当前节点的next设置为下下个节点,然后释放下一个节点所占内存(free), 如果红字条件去掉: 还用上面的方法就有问题,一般上面方法的代码如下: void DeleteRandomNode(Node* pCurrent) { if(pCurrent == NULL) ret

16 把第 i 个结点从链表中删除

这里先删除第2个结点,测试 deleNode 函数 1 /*把第i个结点从链表中删除*/ 2 3 4 #include<stdio.h> 5 #include<stdlib.h> 6 7 //链表中节点的结构 8 typedef struct Link { 9 int data; 10 struct Link* next; 11 }link; 12 13 //链表初始化 14 link* initByTailInsert() { 15 link* phead = NULL;//创建

leetcode链表--18、remove-nth-node-from-end-of-list(从链表中删除倒数第k个结点)

题目描述 Given a linked list, remove the nth node from the end of list and return its head. For example, Given linked list: 1->2->3->4->5, and n = 2.   After removing the second node from the end, the linked list becomes 1->2->3->5. Note:

not(expr|ele|fn)从匹配元素的集合中删除与指定表达式匹配的元素

not(expr|ele|fn) 概述 从匹配元素的集合中删除与指定表达式匹配的元素 参数 exprStringV1.0 一个选择器字符串.深圳dd马达 elementDOMElementV1.0 一个DOM元素 function(index)FunctionV1.4 一个用来检查集合中每个元素的函数.this是当前的元素. 示例 描述: 从p元素中删除带有 select 的ID的元素 HTML 代码: <p>Hello</p><p id="selected&quo

算法总结之 在单链表和双链表中删除倒数第k个节点

分别实现两个函数,一个可以删除单链表中倒数第k个节点,另一个可以删除双链表中倒数第k个节点 思路: 如果链表为空,或者k<1 参数无效 除此之外 让链表从头开始走到尾,每移动一步,就让k的值减1 当链表走到头时候 如果k值大于0   说明不用调整  因为链表根本没有倒数第k个节点 此时将原链表直接返回即可 如果k值=0,说明链表倒数第k个节点就是头节点,此时直接返回head.next 也就是原链表的第二个节点 让第二个节点作为链表的头节点,此时直接返回head.next 如果k值<0  重新从