想請問這題有人能幫忙解答嗎?

(a)考虑以下左图的简单电路,并将数值填入图右的真值表;
(b)使用左图的电路与一个4位元的平行加法器,设计4位元算术元可满足下面的运算:G=A(输出A)、G=A+1(递增A)·
G=A+B(加法)G=A+B1(减法A-B)及G=A-1(递减A),其中G、A及B分别为4位元的输出、以及两个算术单元的输入。

img

例如:
原链表: 1 3 4 3 5 2
删除重复节点后: 1 2 3 4 5
解答:
先定义单向链表节点类:

java
public class ListNode {
    int val;
    ListNode next;

    ListNode(int x) {
        val = x;
    }
}

然后编写删除重复节点的方法:

java
public ListNode deleteDuplicates(ListNode head) {
    if (head == null || head.next == null) return head;
    ListNode cur = head;
    while (cur != null && cur.next != null) {
        if (cur.val == cur.next.val) {
            cur.next = cur.next.next;
        } else {
            cur = cur.next;
        }
    }
    return head;
}

这段代码的思路是:

  1. 先判断链表为空或只有一个节点的情况,直接返回。
  2. 然后遍历链表,「当前节点 cur」和「下一个节点 cur.next」进行比较。
  3. 如果值相同,说明 next 节点是重复节点,直接让 cur 节点跳过重复节点,指向下一节点。
  4. 如果值不同,cur 节点和 next 节点都向后移一位。
  5. 重复步骤 2~4,直到 cur 移动到链表尾部。
  6. 删除重复节点完成,返回头节点 head。
    这段代码时间复杂度 O(N),空间复杂度 O(1)。全程只使用了 cur 和 cur.next 两个指针,没有使用其他空间。
    运行结果如题目所示,能有效删除链表中的重复节点,并使节点的值从小到大排序。