学习日记[11]

更新於 發佈於 閱讀時間約 5 分鐘

1.数据结构:单向循环链式表。我比较愚笨,反应慢同时悟性也差,一上午就搞了一个创建单行循环链式表。不说这个了,还是先来谈谈这个循环链式表吧。相较于之前的非循环单向链式表,区别在于最后一个末尾节点总是指向开头的节点,构成循环结构。所以每次链接都需要在非循环的基础上,将尾部最后一个指针连接到头指针上面。具体代码实现如下

class Node {
int data;
Node next;

public Node(int data) {
this.data = data;
this.next = null;
}
}

class CircularLinkedList {
Node head;
Node tail;

public CircularLinkedList() {
this.head = null;
this.tail = null;
}

public void append(int data) {
Node newNode = new Node(data);
if (head == null) {
head = newNode;
tail = newNode;
tail.next = head; // 将尾节点的下一个节点指向头节点,形成循环
} else {
tail.next = newNode;
tail = newNode;
tail.next = head; // 更新尾节点的下一个节点指向头节点,保持循环
}
}

public void printList() {
if (head == null) {
System.out.println("链表为空");
return;
}

Node current = head;
do {
System.out.print(current.data + " ");
current = current.next;
} while (current != head); // 当遍历到头节点时停止
System.out.println();
}
}
}

其实还有一个插入方法比较简单,向前插入方法用作循环的时候,我们只需要将tail链接上就可以了,比起向后插入方法简单一点。向前插入方法和向后插入方法其实没有太大的区别,主要就是两行代码还是三行代码的问题。向前插入是将新节点和头节点连接上,然后将新节点变成链式表的头节点。

具体实现如下:

newNode.next = head;
head = newNode;
//向前插入具体实现
Node temp = head;
while(temp.next == null)
{
temp = temp.next;
}
temp.next = newNode;
//向后插入的具体实现​

向前插入只需要考虑新节点和头节点,向后插入则需要找到相应插入位置,这可能会麻烦一点。双向链表等明天再说吧,如果明天课程内容轻松的话。

2.《纳粹德国》:今天看了七页。这七页是承接上文三大主义——民族主义、帝国主义、种族主义,对19世纪重大事件的影响来讲的。作者是按照时间顺序来梳理的,从产生的先后、原因和彼此之间的影响这些方面展开叙述。老师说,收获还是有的,比如任意两个学科之间都有交叉。达尔文的进化论为殖民扩张时期的欧洲白种人提供了优越性的基础,还刺激了民族主义的发展。这个投向生物学的重磅炸弹竟然为种族主义和民族主义的发展提供了一部分的理论基础,后来又有一个社会达尔文主义。学科之间没有绝对的断层,反而还有着千丝万缕的联系。然后我就想到了我现如今接受的教育——都是文科没前途纯码字,理科就是技术高端人才,是多么的愚蠢。这些刻板印象竟然还可以存活在老师口中,确实有些可悲。

3.英语:字典并不是一切,他的解释都是根据语境来的,我们只需要了解它的基础含义,然后多读文章,自然就了解这些含义而不是死记硬背。而且字典是语言研究,他是必须严谨的。我并不是要当一个语言专家,只要会说,会写,会用就可以,所以字典中的含义对我来说也是必须也要精简的,要用我自己可以理解的简单的方式进行重述,抄写的本子上,而不是我之前那样不过脑子直接背注释。

4.个人感悟:果然我不适合跟随现代潮流,听到抖音或者其他短视频就烦,他们里面的音乐也是一样。但我尊重那些喜欢短视频的人,这毕竟是喜好问题,没必要把所有厌恶的人当作异教徒来处置。所以我还是逃离这里吧,大学积分谁爱要谁要,潮流谁爱跟谁跟,我只需要做好自己,提升能力,早日摆脱牢笼就好。




avatar-img
0會員
20內容數
这个专题是我个人的学习日记,每日会更新,内容很乱,请多见谅。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
你可能也想看
Google News 追蹤
提問的內容越是清晰,強者、聰明人越能在短時間內做判斷、給出精準的建議,他們會對你產生「好印象」,認定你是「積極」的人,有機會、好人脈會不自覺地想引薦給你
Thumbnail
在資料結構與演算法裡, 最簡單的線性資料結構除了list之外就是linked list鏈結串列了。 Linked list又有分為單向Singly linked list 和雙向Doubly linked list 在這篇文章,會從最基礎的Singly linked list開始講起。 定義
Thumbnail
題目敘述: 給定一個二維陣列的高與寬,並且給定起點位置座標。 請從起點位置開始順時針拜訪陣列元素,並且把沿路走過的座標記錄下來。 以陣列的形式返回答案。
Thumbnail
這篇文章,會帶大家快速回顧DFS+回溯法框架(還沒看過或想複習的可以點連結進去)。 用DFS+回溯法框架,解開 直線排列Permutations 的全系列題目。 幫助讀者鞏固DFS+回溯法框架這個重要的知識點。 回顧 DFS+回溯法框架 白話的意思 # 列舉所有可能的情況,遞迴展開所有分
Thumbnail
題目敘述 題目給定一個鏈結串列中的節點Node,要求我們從鏈結串列中刪除該節點。 題目保證該節點不是tail node。 題目要求我們in-place原位操作。 原本的英文題目敘述 測試範例 Example 1: Input: head = [4,5,1,9], node = 5
Thumbnail
題目敘述 輸入給定一個鏈結串列的head node。 要求我們進行化簡,只要某個節點的右手邊存在比較大的節點,就刪除掉。 例如 5->2->13->3 5的右手邊有13,所以5刪除掉。 2的右手邊有13,所以2刪除掉。 13的右手邊沒有更大的節點,所以13留著。 3的右手邊沒有更大
Thumbnail
給定一個Linked list鏈結串列的Head node, 請判斷這條Linked list是否存在環路(Cycle)? 如果有環路,回傳True。 如果沒有,回傳False。
Thumbnail
這篇文章,會帶著大家複習以前學過的遞回框架, 並且鏈結串列的概念與應用為核心, 貫穿一些相關聯的題目,透過框架複現來幫助讀者理解這個演算法框架。 遞回框架 尋找共通模式(common pattern),對應到演算法的General case 確立初始條件(initial conditio
Thumbnail
題目敘述 題目會給定一個鏈結串列的起始點,要求我們把其中區間總和為0的部分刪除掉。 例如 1→ 2 → -2 → 3 → 4 裡面有一段是2 → -2 區間總和為零,所以簡化刪除後變成 1→ 3 → 4 題目的原文敘述 測試範例 Example 1: Input: head
Thumbnail
題目敘述 題目會給定一個鏈結串列 Linked List的頭部結點,要求我們根據索引的奇偶數重新排列。奇數索引的在前,偶數索引的在後。數的時候,從Head節點的索引=1開始數。 例如: 1 -> 2 -> 3 -> 4 -> 5 重新排列為 1 -> 3 -> 5 -> 2 -> 4
Thumbnail
題目敘述 題目會給定我們一條鏈結串列Linked list的起始節點,要求我們刪除Linked List正中央的節點。 註: 正中央的節點,題目定義為索引為floor( 串列長度 / 2 ) 的節點,索引從零(Head Node)出發開始數。 例如 1 -> 2 -> 3 -> 4 鏈結
提問的內容越是清晰,強者、聰明人越能在短時間內做判斷、給出精準的建議,他們會對你產生「好印象」,認定你是「積極」的人,有機會、好人脈會不自覺地想引薦給你
Thumbnail
在資料結構與演算法裡, 最簡單的線性資料結構除了list之外就是linked list鏈結串列了。 Linked list又有分為單向Singly linked list 和雙向Doubly linked list 在這篇文章,會從最基礎的Singly linked list開始講起。 定義
Thumbnail
題目敘述: 給定一個二維陣列的高與寬,並且給定起點位置座標。 請從起點位置開始順時針拜訪陣列元素,並且把沿路走過的座標記錄下來。 以陣列的形式返回答案。
Thumbnail
這篇文章,會帶大家快速回顧DFS+回溯法框架(還沒看過或想複習的可以點連結進去)。 用DFS+回溯法框架,解開 直線排列Permutations 的全系列題目。 幫助讀者鞏固DFS+回溯法框架這個重要的知識點。 回顧 DFS+回溯法框架 白話的意思 # 列舉所有可能的情況,遞迴展開所有分
Thumbnail
題目敘述 題目給定一個鏈結串列中的節點Node,要求我們從鏈結串列中刪除該節點。 題目保證該節點不是tail node。 題目要求我們in-place原位操作。 原本的英文題目敘述 測試範例 Example 1: Input: head = [4,5,1,9], node = 5
Thumbnail
題目敘述 輸入給定一個鏈結串列的head node。 要求我們進行化簡,只要某個節點的右手邊存在比較大的節點,就刪除掉。 例如 5->2->13->3 5的右手邊有13,所以5刪除掉。 2的右手邊有13,所以2刪除掉。 13的右手邊沒有更大的節點,所以13留著。 3的右手邊沒有更大
Thumbnail
給定一個Linked list鏈結串列的Head node, 請判斷這條Linked list是否存在環路(Cycle)? 如果有環路,回傳True。 如果沒有,回傳False。
Thumbnail
這篇文章,會帶著大家複習以前學過的遞回框架, 並且鏈結串列的概念與應用為核心, 貫穿一些相關聯的題目,透過框架複現來幫助讀者理解這個演算法框架。 遞回框架 尋找共通模式(common pattern),對應到演算法的General case 確立初始條件(initial conditio
Thumbnail
題目敘述 題目會給定一個鏈結串列的起始點,要求我們把其中區間總和為0的部分刪除掉。 例如 1→ 2 → -2 → 3 → 4 裡面有一段是2 → -2 區間總和為零,所以簡化刪除後變成 1→ 3 → 4 題目的原文敘述 測試範例 Example 1: Input: head
Thumbnail
題目敘述 題目會給定一個鏈結串列 Linked List的頭部結點,要求我們根據索引的奇偶數重新排列。奇數索引的在前,偶數索引的在後。數的時候,從Head節點的索引=1開始數。 例如: 1 -> 2 -> 3 -> 4 -> 5 重新排列為 1 -> 3 -> 5 -> 2 -> 4
Thumbnail
題目敘述 題目會給定我們一條鏈結串列Linked list的起始節點,要求我們刪除Linked List正中央的節點。 註: 正中央的節點,題目定義為索引為floor( 串列長度 / 2 ) 的節點,索引從零(Head Node)出發開始數。 例如 1 -> 2 -> 3 -> 4 鏈結