鍊錶的五種操作

2021-09-27 07:49:25 字數 2056 閱讀 3539

採用就地逆置, 定義三個指標變數, 乙個標記現在跟在head後的節點, 乙個記錄現在要移動的節點, 乙個記錄現在要移動的節點之後的節點。

struct listnode* reverselist(struct listnode* head)

if (head->next == null)

p = head;

q = p->next;

r = q->next;

p->next = null;

while(1)

p = q;

q = r;

r = r->next;

}return head;

}

定義兩個指標,快慢指標, 快的一次走兩個, 慢的一次走乙個, 如果他們可以相遇, 說明是迴圈鍊錶, 如果快指標走到了結尾, 則不是迴圈鍊錶

bool hascycle(struct listnode *head) 

pfast = head->next;

pslow = head;

while (1)

if (pfast->next->next == null)

pfast = pfast->next->next;

pslow = pslow->next;

if (pslow == pfast)

}}

使用兩次遍歷, 方法顯而易見,但如果使用一次遍歷, 方法是定義兩個指標, 第乙個指標先向前走n個, 此時第二個指標開始走, 這樣當第乙個指標走到結尾時, 第二個指標走到倒數第n個節點位置。

struct listnode* removenthfromend(struct listnode* head, int n)

ptemp1 = ptemp1->next;

}if (ptemp1->next == null)

while(ptemp1->next != null)

ppre->next = ptemp2->next;

return head;

}

定義兩個快慢指標, 比如只有三個節點, 快指標指向第三個, 慢指標指向第乙個節點, 判斷快的下乙個是否為空, 此時為空, 讓慢指標下乙個為頭指標, 輸出該鍊錶。

struct listnode* middlenode(struct listnode* head) 

if (head->next->next == null)

pfast = pslow = (struct listnode*)malloc(sizeof(struct listnode));

pfast = head->next->next;

pslow = head;

for (i = 1; ; i++)

if ((pfast->next != null) && (pfast->next->next == null))

pfast = pfast->next->next;

pslow = pslow->next;

}}

我的思路是,先尋找以那條鏈作為主鏈,比如1,2,3和2,3,4通過比較第乙個我覺定以第一條作為主鏈,把第二條插到第一條,ptemp標記第二條目前要插入的元素,ppre標記第一條鏈的元素,如果是1表示插到1後

struct listnode* mergetwolists(struct listnode* l1, struct listnode* l2)

if (l2 == null)

ppre = plater = ptemp = (struct listnode *)malloc(sizeof(struct listnode));

if (l1->val < l2->val) else

if (ppre->next == null) else else }}

}} else else

if (ppre->next == null) else else }}

}}

}

這些都是我在力扣上提交的**

五個常見鍊錶操作

package cn.wangbo.list 這是鍊錶類,封裝了鍊錶節點資訊 public class node public node t val,node next 單鏈表反轉,只需要將每個結點的next指標指向其前驅結點。這個過程中,為了避免斷鏈,我們需要新建三個結點記錄當前結點 當前結點的前...

鍊錶(五) 單向迴圈鍊錶

1.單向迴圈鍊錶 區分單向鍊錶和單向迴圈鍊錶 單向迴圈鍊錶的尾指標指向頭結點。2.單向迴圈鍊錶的基本操作 include include define null 0 typedef struct node elemsn elemsn creat link int ms 建立乙個單向迴圈鍊錶 void...

鍊錶的操作

鍊錶是資料結構中的乙個重要組成部分,對鍊錶操作的熟練度怎麼要求都不過分。只有部分核心 主要內容 1 鍊錶的建立 2 鍊錶的釋放 3 鍊錶的查詢 4 鍊錶中節點的插入 5 鍊錶中節點的刪除 6 鍊錶的反轉 7 兩個鍊錶的連線 define max 15 節點宣告 struct list typedef...