ARTS Week 27

Algorithm

本周的 LeetCode 题目为 328. 奇偶链表

给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。

请尝试使用原地算法完成。你的算法的空间复杂度应为 O(1),时间复杂度应为 O(nodes),nodes 为节点总数。

首先分别奇数和偶数头节点,然后遍历链接,分别找出奇数节点子链表和偶数节点子链表,最后新建一个链表头,分别将奇数和偶数链表连接起来即可。

输入: 1->2->3->4->5->NULL
输出: 1->3->5->2->4->NULL
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode oddEvenList(ListNode head) {
        if (head == null || head.next == null || head.next.next == null) {
            return head;
        }
        ListNode oddDummy = head, oddNode = head;
        ListNode evenDummy = head.next, evenNode = head.next;
        while (oddNode != null && evenNode != null) {
            oddNode.next = evenNode.next;
            oddNode = oddNode.next;
            if (oddNode != null) {
                evenNode.next = oddNode.next;
                evenNode = evenNode.next;
            }
        }
        oddNode = oddDummy;
        while (oddNode.next != null) {
            oddNode = oddNode.next;
        }
        oddNode.next = evenDummy;
        return oddDummy;
    }
}

Review

本周 Review 的英文文章为:什么是端口转发?

端口转发是将网络流量从一个端口发送到同一计算机或不同计算机的另一个端口,特定的端口收到流量后将由特定的网络应用程序来处理,如80端口处理网站请求。本文介绍了如何进行端口转发:

  1. 使用路由器进行端口转发,通过将外部端口设置为1234,内部端口设置为30000,这会将端口1234流量转发到10.0.1.2的端口30000。

  2. 带防火墙的端口转发,你需要使用firewall-cmd命令来转发服务器上的流量:

$ sudo firewall-cmd \
--add-forward-port \
port=80:proto=tcp:toport=8065

要使得更改永久化,需要添加--runtime-to-permanent选项。

  1. 除此之外,例如使用IP转发或设置代理。

Tip

Python中如何调用C语言函数?Python 中有一个 ctypes 库,他可以调用动态链接库或共享库中的函数,因为C语言支持函数重载,为了避免在二进制中发生冲突,因此需要extern来进行修饰。下面是一个示例:

// lib.cpp
#include <iostream>

int Function(int num) 
{
    std::cout << "Num = " << num << std::endl;
    return 0;
}

extern "C" {
    int My_Function(int a)
    {
        return Function(a);
    }
}

使用下面的编译命令将上述代码编译成共享库:

g++ -fPIC -shared -o libTest.so lib.cpp

Python 调用共享库的代码如下:

import ctypes
import sys
import os 

dir_path = os.path.dirname(os.path.realpath(__file__))
handle = ctypes.CDLL(dir_path + "/libTest.so")     

handle.My_Function.argtypes = [ctypes.c_int] 
  
def My_Function(num):
    return handle.My_Function(num)

Python 测试代码如下:

from myLib import *

My_Function(16)

运行结果如下:

$ python3 test.py
Num = 16

Share

生活已逐渐已回到正轨上,过去一周基本上每天都会出去快走or跑步,活动活动锻炼一下,感觉不论何种情况,身体永远是第一位的。

posted @ 2022-02-27 17:53  永远是萌新的阿岩  阅读(38)  评论(0编辑  收藏  举报