資料結構 鍊錶操作之反轉鍊錶

2021-06-14 16:39:56 字數 941 閱讀 9334

這兩天遇到幾個反轉鍊錶的題目,覺得比較有意思,這裡分享一下:

1 給出乙個鍊錶,同時給出索引m和n,要求將位於m和n之間的節點反轉,然後返回結果。

1 < m < n < lengthof(linklist)

eg: 1->2->3->4->5  m =2, n = 4 輸出:1 -> 4 -> 3 -> 2 ->5

反轉鍊錶的時候,有乙個比較關鍵的技巧,比如鍊錶1-2-3-4-5

第一次反轉的時候,pre = 1,cur = 2,這時候把2換掉最前面得到2-1-3-4-5

再次反轉的時候,pre = 1 cur = 3, 得到3-2-1-4-5,每次都把cur插入到最前面,

最後得到5-4-3-2-1.這裡也是採用的同樣的方法。

listnode* reverse(listnode * head, int m,int n)

pre1 = head;

head = head -> next;

}return dummy.next;

}

2 反轉鍊錶也可以有如下的衍生形式:

比如以k為距離反轉長度為n的鍊錶:k = 2, n= 4;

1-2-3-4, 得到2-1 - 4-3,

這個就是多新增了乙個遍歷的時候對長度的判斷,只有在遍歷到k的整數倍的時候,才把這k個鍊錶節點拿出來反轉,而反轉的過程則跟上題一樣。

這裡給出乙份參考**,來自leetcode @linfuzki

listnode *reversekgroup(listnode *head, int k)  else 

}return dummy.next;

}listnode *reverse(listnode *pre, listnode *next)

return last;

}

資料結構之鍊錶反轉

鍊錶分為單向鍊錶和雙向鍊錶,無論是哪一種鍊錶,反轉都是類似的,區別主要是雙向將當前節點的last節點指向next節點。鍊錶反轉要注意的就是找到當前節點時,在進行反轉前,找到當前節點的上乙個節點和下乙個節點,這樣才能保證每一次的反轉後可以移動到下乙個節點並繼續進行操作。public class nod...

Java資料結構之鍊錶反轉

思路很簡單,定義乙個類,這個類分成2塊,一塊是表示自身的標誌,另外乙個儲存指向下乙個元素的引用。通過互換相鄰兩個節點的引用來達到鍊錶反轉的效果。上 package com.withiter.test public class reverselist public static node add st...

資料結構之鍊錶操作

線性表鏈式儲存結構定義 為了表示每個資料元素ai與其後繼資料元素ai 1之間的邏輯關係,對資料元素ai來說,除了儲存其本身資訊外,還需儲存乙個指示其直接後繼的資訊。我們把儲存資料元素的域稱為資料域,把儲存直接後繼位置的域稱為指標域。指標域中儲存的資訊稱為指標或鏈。這兩部分資訊組成資料元素ai的儲存影...