單鏈表的相關操作

2021-08-03 03:29:30 字數 1317 閱讀 3598

1.單鏈表的反轉

在這裡實現一種最簡單的鍊錶反轉的方法,遞迴反轉,在反轉當前借點之前先反轉後續的節點,這樣層層深入直到最後乙個子節點。

package com.weibo.linkedlist;

public

class reversenode

public listnodes reverse(listnodes node)else

}public

static

void

main(string args)

}

2.單鏈表是否有環

是否有環的判斷還是蠻簡單的,就是定義兩個指標從頭節點開始,slow=slow.next,fast = fast.fast.fast,如果slow=fast則有環,這個和找鍊錶的中心節點一樣,看示例

//查詢中心節點

public

static node getmiddle(node head)

node slow, fast; //「快慢指標」

slow = fast = head;

while (fast.next != null && fast.next.next != null)

return slow;

}

public static node loop(node node) 

node n1 = node.next;

node n2 = node.next.next;

while (n1 != n2)

n1 = n1.next;

n2 = n2.next.next;

}}

3.單鏈表是否有環如果有的話則找出環節點**如下:

/*

* 判斷是否存在環,如果存在,則找出環的入口點。

* 入口點找法:快慢指標,塊指標走兩步,滿指標走一步,如果存在迴圈,則在慢指標走完環前,總會和快指標相遇。

* 從頭指標和相遇點同時向後走,相遇的點必定是入口點。

*/public static node getloopnode(node node)

node n1 = node.next;

node n2 = node.next.next;

while (n1 != n2)

n1 = n1.next;

n2 = n2.next.next;

}n2 = node;

while (n1 != n2)

return n1;

}

單鏈表的相關操作

最近複習資料結構的時候,複習到了鍊錶,把王道上的關於鍊錶的基本操作敲了一遍,當是複習鞏固,記錄在此,沒準以後能用得到。結點型別 typedef struct lnode lnode,linklist 前插法建立單鏈表 linklist createlist1 linklist l while val...

單鏈表相關操作

這是自己寫的最長的一次 了 在機房敲了一天。以前一直用list來水鍊錶的題 這次終於體會到痛苦了 include include include include include include using namespace std typedef struct node 單鏈表 s,list vo...

單鏈表相關操作

typedef int sltdatatype typedef struct slistnode slistnode typedef struct slist slist 通過畫圖來理解無頭單向非迴圈鍊錶的相關操作 其中操作在圖中用簡易偽 描述 先將要插入的結點指向第乙個結點,然後頭指標指向插入的結...