import java.util.HashSet;
import java.util.LinkedList;
class Linknode{
// 首先要定义节点类
// 要在节点类中定义节点的内容和指向下一个节点的指针
int data;
Linknode next;
// 构造器
Linknode(int data) {
this.data=data;
this.next=null;
}
// 为了显示方便,我们可以重写toString方法
@Override
public String toString() {
return "data=" + data ;
}
}
public class LinkList {
// 初始化头节点,一般不要动他所以用private,而head不放具体数据的原因主要是因为
// 链表为空时,不让链表为null,所以用一个头节点来代替null,防止了空指针问题
private Linknode head=new Linknode(0);
// 尾插法插入数据
public void AddtoLast(int val) {
// 定义一个新节点,储存数据
Linknode New=new Linknode(val);
// 定义一个现节点,遍历数据
Linknode Cur=head;
while(Cur.next!=null) {
Cur=Cur.next;
}
Cur.next=New;
}
// 在指定位置插入数据
public void Addindex(int index,int val)
{
Linknode New=new Linknode(val);
Linknode Cur=head;
for(int i=0;i<index;i++)
{
Cur=Cur.next;
}
New.next=Cur.next;
Cur.next=New;
}
// 删除指定位置的数据
public void Deleteindex(int index) {
Linknode Cur = head;
for (int i = 0; i < index; i++) {
Cur = Cur.next;
}
Cur.next = Cur.next.next;
}
// 修改指定位置的数据
public void update(int index,int val)
{
Linknode Cur = head;
for (int i = 0; i < index; i++) {
Cur = Cur.next;
}
Cur.next.data=val;
}
// 查找指定元素的首次出现的位置
public int search(int val){
Linknode Cur = head;
int index=0;
while(Cur.next!=null)
{
Cur=Cur.next;
if(Cur.data==val)
{
return index;
}
index++;
}
// 如果没有找到,抛出异常,因此在使用search时要对他进行try catch环绕
throw new RuntimeException("没有找到");
}
// 链表的交集
public LinkList intersection(LinkList list2) {
LinkList result = new LinkList();
HashSet<Integer> set = new HashSet<>();
Linknode current = head.next;
while (current != null) {
set.add(current.data);
current = current.next;
}
current = list2.head.next;
while (current != null) {
if (set.contains(current.data)) {
result.AddtoLast(current.data);
}
current = current.next;
}
return result;
}
//链表的并集
public LinkList union(LinkList list2) {
LinkList result = new LinkList();
HashSet<Integer> set = new HashSet<>();
Linknode current = head.next;
while (current != null) {
set.add(current.data);
result.AddtoLast(current.data);
current = current.next;
}
current = list2.head.next;
while (current != null) {
if (!set.contains(current.data)) {
result.AddtoLast(current.data);
}
current = current.next;
}
return result;
}
//链表1对于链表2的差集
public LinkList complement(LinkList list2) {
LinkList result = new LinkList();
HashSet<Integer> set = new HashSet<>();
Linknode current = list2.head;
while (current != null) {
set.add(current.data);
current = current.next;
}
current = head;
while (current != null) {
if (!set.contains(current.data)) {
result.AddtoLast(current.data);
}
current = current.next;
}
return result;
}
// 遍历链表
public void show() {
if(head.next==null)
{
System.out.println("链表为空");
}
Linknode Cur = head.next;
while (Cur != null) {
System.out.println(Cur);
Cur = Cur.next;
}
}
}
链表的交并补
最新推荐文章于 2024-07-03 11:26:52 发布