每日java5-18

  1. 不使用第三个数交换两个数的值

public class twoSum {

public static void main(String[] args) {

int a=10,b=12;

a=b-a; //a=2;b=12

b=b-a; //a=2;b=10

a=b+a; //a=12;b=10

System.out.println(“a:”+a);

System.out.println(“b:”+b);

int x=10,y=12;

x=x+y;//a=22,b=12

y=x-y;//a=22,b=10

x=x-y;//a=12,b=10

System.out.println(“x:”+x);

System.out.println(“y:”+y);

}

}

87.链表

public class test {

//Node 类

public class NodeDemo {

private class Node {

private T data; // 存放结点数据

private Node next; // 下个结点

public Node() {

}

public Node(T data, Node next) {

this.data = data;

this.next = next;

}

}

private Node head;// 链表的头结点

private Node tail;// 链表的尾节点

int size;

public NodeDemo() {

head = null;

tail = null;

}

public NodeDemo(T data) {

head = new Node(data, null);

tail = head;

size++;

}

}

public static void main(String[] args) {

NodeDemo
nodeDemo = new NodeDemo();

nodeDemo.addTailNode(“111”);

nodeDemo.addTailNode(“222”);

nodeDemo.addTailNode(“333”);

nodeDemo.addTailNode(“444”);

System.out.println(nodeDemo);

System.out.println(“链表的size:” + nodeDemo.size);

System.out.println(“删除某个节点的位置:” + nodeDemo.findIndexByNode(“333”));

System.out.println(“查询指定位置的节点:” + nodeDemo.findNodeByIndex(2).data);

System.out.println(“删除指定位置的节点:” + nodeDemo.deleteNode(2));

System.out.println(nodeDemo);

System.out.println(“链表是否为空:” + nodeDemo.isEmpty());

nodeDemo.clear();

System.out.println(“清空后的链表:” + nodeDemo);

System.out.println(“链表是否为空:” + nodeDemo.isEmpty());

}

//尾部插入

public void addTailNode(T element) {

if (head == null) {

head
= new Node(element, null);

tail
= head;

}else {

Node
node = new Node(element, null);

tail.next
= node;

tail
= node;

}

size++;

}

//头部插入

public void addHeadNode(T element){

head
= new Node(element, head);

if (tail == null) {

tail
= head;

}

}

//指定位置插入

public void addIndexNode(T element, int index) {

if (head == null) {

addTailNode(element);

}else {

if (index == 0) {

addHeadNode(element);

}else {

Node
pre = findNodeByIndex(index-1);//找到要插入位置的前一个节点

Node
node = new Node(element, pre.next);

//插入后pre的next指向新节点,新节点的next指向原来pre的下一个节点

pre.next = node;

size++;

}

}

}

//根据结点查询结点存放的位置

public int findIndexByNode(T element) {

Node
current = head;

int index = 0;

while (current != null) {

if (current.data.equals(element)) {

return index;

}

current = current.next;

index++;

}

return -1;

}

//根据结点位置删除指定位置的结点

public T deleteNode(int index) {

Node
dNode = null;

if(index < 0 || index > size-1)  {

throw new IndexOutOfBoundsException(“链表越界”);

}

if (index == 0) {

dNode = head;

head
= head.next;

}else {

Node
pre = findNodeByIndex(index-1);//获取要删除的节点的前一个节点

dNode = pre.next;//要删除的节点就是pre的next指向的节点

pre.next = dNode.next;//删除以后pre的next指向被删除节点之前所指向的next

dNode.next = null;

}

return dNode.data;

}

//清空链表

public void clear() {

head
= tail = null;

size
= 0;

}

//判断链表是否为空

public boolean isEmpty() {

return size == 0 ? true : false;

}

//打印链表

public String toString() {

Node
node = head;

StringBuffer
sb = new StringBuffer();

while (node != null) {

sb.append(node.data+" ");

node = node.next;

}

return sb.toString();

}

}

88.删除链表重复元素,不保留重复元素。

创建链表:

public class ListNode {

int value;

ListNode next;

public ListNode(int value,ListNode next) {

this.value=value;

this.next=next;

}

}

算法:

public static ListNode remove(ListNode node) {

ListNode first=new ListNode(0,null);

first.next=node;

ListNode temp=node;

ListNode pre=first;

while(temp!=null&&temp.next!=null) {

if(temp.next.value==temp.value) {

int val=temp.value;

while(temp!=null&&temp.value==val) {

temp=temp.next;

}

pre.next=temp;

}else {

pre=temp;

temp=temp.next;

}

}

return node;

}

89.删除链表重复元素,只保留一个。

创建链表:

public class ListNode {

int value;

ListNode next;

public ListNode(int value,ListNode next) {

this.value=value;

this.next=next;

}

}

算法:

public static ListNode returnList(ListNode node){

ListNode temp=node;

while(temp!=null) {

ListNode q=temp.next;

while(q!=null&&q.value==temp.value) {

q=q.next;

}

temp.next=q;

temp=temp.next;

}

return node;

}

90.单链表的反转

定义一个链表:

public class ListNode {

private int data;

ListNode next;

public ListNode(int data) {

super();

this.data=data;

}

}

算法:

public static ListNode reserve(ListNode head) {

ListNode pre = head; // 上一节点

ListNode now = head.next; // 当前节点

while (now != null) {

ListNode temp = now.next; // 将下一节点存入临时节点

now.next = pre; // 当前节点指向上一个

pre = now;

now = temp;

}

head.next = null;

return pre;

}

遍历链表:

public static void print(ListNode li){

while(li!=null){

System.out.println(li.data+" ");

li=li.next;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值