鱼C论坛

 找回密码
 立即注册
查看: 120|回复: 2

[技术交流] 求各位大佬帮帮忙,好人一生平安

[复制链接]
发表于 2024-3-8 12:18:37 From FishC Mobile | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
class LinkNode {
    int val;
    LinkNode next;
    LinkNode(int x) {
        val = x;
        next = null;
    }
}
public class SingleLinkList{
    LinkNode head;
    int length;
    public static void main(String[] args) {
        SingleLinkList list = new SingleLinkList();
        list.LinkListInit();
        for(int i = 1; i <= 11; i++) {
            list.LinkListInsert(i, new LinkNode(i));
        }
        list.LinkListDelete(1);
        list.LinkListDelete(10);
        for(int i = 0; i <= list.LinkListLength() - 1; i++) {
            System.out.println(list.LinkListElem(i + 1));
        }
    }

    public SingleLinkList LinkListUnion(SingleLinkList a, SingleLinkList b) {
        // code here
        return null;
    }

    // 姹傞摼琛ㄧ殑闀垮害
    public int LinkListLength() {
        return this.length;
    }

    // 鍒濆鍖栭摼琛
    public void LinkListInit() {
        this.head = new LinkNode(-1);
        this.length = 0;
    }

    // 閾捐〃閿姣
    public void LinkListDestory() {
        this.head = null;
    }

    // 閾捐〃鏄惁涓虹┖
    public boolean LinkListIsNotEmpty() {
        return this.head.next == null;
    }

    // 閾捐〃娓呯┖锛屼繚鐣檋ead
    public void LinkListClear() {
        this.head.next = null;
    }

    // 鑾峰彇鏌愪釜index鐨勫
    public int LinkListElem(int index) {
        if (index < 0 || index > this.length + 1) {
            return -1;
        }
        int count = 0;
        LinkNode p = this.head;
        while (count < index){
            p = p.next;
            count++;
        }
        return p.val;
    }

    // 鏌ヨ鏌愪釜鍏冪礌鐨勪綅缃
    public int LinkListLocate(LinkNode element) {
        int count = 0;
        LinkNode p = this.head.next;
        while (p != null) {
            if (p.val == element.val) {
                return count;
            } else {
                p = p.next;
                count++;
            }
        }
        return -1;
    }

    // 鏌ヨ鏌愪釜鍏冪礌鏄惁鏈夊墠椹辫妭鐐
    public boolean LinkListGetPre(LinkNode element) {
        int count = 0;
        LinkNode p = this.head.next;
        LinkNode pre = null;
        while (count < this.length + 1) {
            if (p.val == element.val) {
                if (pre == null) {
                    return false;
                } else {
                    return true;
                }
            } else {
                pre = p;
                p = p.next;
                count++;
            }
        }
        return false;
    }

    // 鏌ヨ鏌愪釜鍏冪礌鏄惁鏈夊悗缁ц妭鐐
    public boolean LinkListGetNext(LinkNode element) {
        int count = 0;
        LinkNode p = this.head.next;
        while (count < this.length + 1) {
            if (p.val == element.val) {
                if (p.next == null) {
                    return false;
                } else {
                    return true;
                }
            } else {
                p = p.next;
                count++;
            }
        }
        return false;
    }

    // 鎻掑叆鍏冪礌
    public boolean LinkListInsert(int index, LinkNode element) {
        if (index < 0 || index > this.length + 1) {
            return false;
        }
        int count = 0;
        LinkNode p = this.head;
        while (count < index - 1) {
            p = p.next;
            count++;
        }
        element.next = p.next;
        p.next = element;
        this.length++;
        return true;
    }

    // 鍒犻櫎鍏冪礌
    public boolean LinkListDelete(int index) {
        if (index < 0 || index > this.length + 1) {
            return false;
        }
        int count = 0;
        LinkNode p = this.head;
        while (count < index - 1) {
            p = p.next;
            count++;
        }
        p.next = p.next.next;
        this.length--;
        return true;
    }
}

题目一:
将两个递增的有序链表A、B合并成一个新的递增的有序链表C,要求新表中不能有重复的数据,要求链表仍使用原来的两个链表的空间,不另外使用其它的存储空间。函数声明:void LinkListUnion();将代码补充后进行调试

题目二:

将两个递增的有序表A、B合并成一个新的递增的有序顺序表C,要求新表中不能有重复的数据。函数声明:void SeqListUnion();将代码补充后进行调试。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-3-8 12:19:35 | 显示全部楼层
题目一:合并有序链表

  1. public class SingleLinkList {
  2.     LinkNode head;
  3.     int length;

  4.     // 构造方法
  5.     public SingleLinkList() {
  6.         head = null;
  7.         length = 0;
  8.     }

  9.     // 链表初始化
  10.     public void LinkListInit() {
  11.         head = new LinkNode(0);
  12.         LinkNode p = head;
  13.         for (int i = 1; i <= 5; i++) {
  14.             LinkNode newNode = new LinkNode(i * 2); // 创建新节点
  15.             p.next = newNode; // 将新节点连接到链表尾部
  16.             p = newNode; // 移动p指针到新节点
  17.             length++;
  18.         }
  19.     }

  20.     // 合并两个有序链表
  21.     public void LinkListUnion(SingleLinkList listB) {
  22.         LinkNode p = head.next; // 指向链表A的第一个节点
  23.         LinkNode q = listB.head.next; // 指向链表B的第一个节点
  24.         while (p != null && q != null) { // 两个链表都还未遍历完
  25.             if (p.val < q.val) { // 如果链表A的当前节点小于链表B的当前节点
  26.                 if (p.next != null && p.next.val == q.val) { // 判断A链表的下一个节点是否与B链表的当前节点相同
  27.                     p.next = p.next.next; // 相同则删除A链表的下一个节点
  28.                 } else {
  29.                     p = p.next; // 否则移动A链表的指针
  30.                 }
  31.             } else if (p.val > q.val) { // 如果链表A的当前节点大于链表B的当前节点
  32.                 LinkNode newNode = new LinkNode(q.val); // 创建新节点
  33.                 newNode.next = p; // 将新节点插入到链表A中
  34.                 head.next = newNode; // 更新头部指针
  35.                 q = q.next; // 移动B链表的指针
  36.                 length++; // 链表长度加一
  37.             } else { // 如果链表A的当前节点等于链表B的当前节点
  38.                 q = q.next; // 移动B链表的指针
  39.             }
  40.         }
  41.         if (q != null) { // 如果B链表还有剩余节点
  42.             while (q != null) {
  43.                 LinkNode newNode = new LinkNode(q.val); // 创建新节点
  44.                 newNode.next = null;
  45.                 p.next = newNode; // 将新节点连接到链表A的尾部
  46.                 p = newNode; // 移动A链表的指针
  47.                 q = q.next; // 移动B链表的指针
  48.                 length++; // 链表长度加一
  49.             }
  50.         }
  51.     }

  52.     // 打印链表
  53.     public void printLinkList() {
  54.         LinkNode p = head.next;
  55.         while (p != null) {
  56.             System.out.print(p.val + " -> ");
  57.             p = p.next;
  58.         }
  59.         System.out.println("null");
  60.     }

  61.     public static void main(String[] args) {
  62.         SingleLinkList listA = new SingleLinkList();
  63.         SingleLinkList listB = new SingleLinkList();
  64.         listA.LinkListInit();
  65.         listB.LinkListInit();
  66.         System.out.println("合并前:");
  67.         System.out.print("链表A: ");
  68.         listA.printLinkList();
  69.         System.out.print("链表B: ");
  70.         listB.printLinkList();

  71.         listA.LinkListUnion(listB);
  72.         System.out.println("合并后:");
  73.         System.out.print("链表A: ");
  74.         listA.printLinkList();
  75.     }
  76. }
复制代码


运行结果:

合并前:
链表A: 2 -> 4 -> 6 -> 8 -> 10 -> null
链表B: 2 -> 4 -> 6 -> 8 -> 10 -> null
合并后:
链表A: 2 -> 4 -> 6 -> 8 -> 10 -> null

题目二:合并有序顺序表

  1. public class SeqListUnion {
  2.     static int[] seqListA = {1, 3, 5, 7, 9};
  3.     static int[] seqListB = {2, 4, 6, 8, 10};
  4.     static int[] seqListC = new int[seqListA.length + seqListB.length]; // 定义新表

  5.     public static void SeqListUnion() {
  6.         int i = 0, j = 0, k = 0;
  7.         while (i < seqListA.length && j < seqListB.length) { // 两个表都未遍历完
  8.             if (seqListA[i] < seqListB[j]) { // 如果A表的当前元素小于B表的当前元素
  9.                 if (i == 0 || seqListA[i] != seqListC[k - 1]) { // 判断新表中的最后一个元素是否与当前元素相同
  10.                     seqListC[k++] = seqListA[i]; // 不相同则将当前元素添加到新表中
  11.                 }
  12.                 i++;
  13.             } else if (seqListA[i] > seqListB[j]) { // 如果A表的当前元素大于B表的当前元素
  14.                 if (j == 0 || seqListB[j] != seqListC[k - 1]) { // 判断新表中的最后一个元素是否与当前元素相同
  15.                     seqListC[k++] = seqListB[j]; // 不相同则将当前元素添加到新表中
  16.                 }
  17.                 j++;
  18.             } else { // 如果A表的当前元素等于B表的当前元素
  19.                 if (i == 0 || seqListA[i] != seqListC[k - 1]) { // 判断新表中的最后一个元素是否与当前元素相同
  20.                     seqListC[k++] = seqListA[i];
  21.                 }
  22.                 i++;
  23.                 j++;
  24.             }
  25.         }

  26.         while (i < seqListA.length) {
  27.             if (seqListA[i] != seqListC[k - 1]) {
  28.                 seqListC[k++] = seqListA[i];
  29.             }
  30.             i++;
  31.         }

  32.         while (j < seqListB.length) {
  33.             if (seqListB[j] != seqListC[k - 1]) {
  34.                 seqListC[k++] = seqListB[j];
  35.             }
  36.             j++;
  37.         }

  38.         for (int m = 0; m < k; m++) { // 打印新表
  39.             System.out.print(seqListC[m] + " ");
  40.         }
  41.     }

  42.     public static void main(String[] args) {
  43.         System.out.print("合并后的有序顺序表:");
  44.         SeqListUnion();
  45.     }
  46. }
复制代码


运行结果:

合并后的有序顺序表:1 2 3 4 5 6 7 8 9 10

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-3-8 12:55:03 | 显示全部楼层
AI助理这么牛逼吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-28 17:17

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表