4 單向鍊錶的常見題型

2022-05-05 17:54:10 字數 2842 閱讀 8531

本篇主要是單向鍊錶題型的實戰,比如反轉單向鍊錶、查詢單向鍊錶的中間節點、判斷乙個鍊錶是否有環、合併兩個有序鍊錶、判斷乙個單向鍊錶是否是回文鍊錶。

/**

* node為鍊錶結點物件 */

class

node

}public

class

linkedlistutil

return

pre;

}/*** 獲得鍊錶的中間節點,若是單節點鍊錶則返回頭結點

* 思路:申請兩個變數(指標)pre、cur,pre指向頭結點,cur指向頭結點的下乙個結點,然後pre每次走一步,cur每次走兩步,當cur為null或者cur的下一結點為null則此時pre即為中間節點

* @param

head

* @return

*/public

static

node getmiddlenode(node head)

node pre =head;

node cur =head.next;

while(cur != null && cur.next != null

)

return

pre;

}/*** 判斷乙個鍊錶是否有環

* 思路:申請兩個變數(指標)pre、cur指向頭結點,pre每次走一步,cur每次走兩步,若pre等於cur則說明有環

* @param

head

* @return

*/public

static

boolean

iscircle(node head)

}return

false

; }

/*** 合併兩個有序鍊錶為乙個公升序鍊錶**

@param

head1 有序鍊錶1的頭節點

* @param

head2 有序鍊錶2的頭節點

* @return

*/public

static

node merageorderedlist(node head1, node head2)

if (head2 == null

) node temp1 =head1;

node temp2 =head2;

node temphead1 =head1;

node temphead2 =head2;

/*判斷鍊錶1是否公升序,若不是則反轉鍊錶1

*/while(temp1 != null && temp1.next != null

) temp1 =temp1.next;

}/*判斷鍊錶2是否公升序,若不是則反轉鍊錶2

*/while(temp2 != null && temp2.next != null

) temp2 =temp2.next;

}//用變數head儲存合併後有序鍊錶的頭節點

node head = null

;

if(temphead1.data else

node cur =head;

/*執行合併兩個鍊錶

*/while(temphead1 != null && temphead2 != null

)else

}/*執行合併操作結束後,若其中乙個鍊錶不為空則將該鍊錶接到合併鍊錶之後

*/if(temphead1!= null

)

if(temphead2!= null

)

return

head;

}/*** 判斷乙個單向鍊錶是否為回文鍊錶

* 思路:反轉後半部分鍊錶,然後與前半部分比對,若有不同則不是回文鍊錶,否則是回文鍊錶,然後反轉鍊錶復原並拼接到前半部分

* @param

head

* @return

*/public

static

boolean

ispalindrome(node head)

boolean flag = true

;

//找到鍊錶的中間節點

node pre =getmiddlenode(head);

//反轉後半部分的鍊錶

node reversehead =reverselist(pre.next);

//用cur臨時儲存乙份反轉鍊錶的頭結點

node cur =reversehead;

node helphead =head;

while (cur != null

) cur =cur.next;

helphead =helphead.next;

}pre.next =reverselist(reversehead);

return

flag;

}public

static

void

main(string args)

//node root = new node(3);

= new node(5);

//node mearge = merageorderedlist(head,reverse);

//while(mearge != null)

//node ress = reverselist(head);

node test = new node(1);

test.next =test;

system.out.println(iscircle(test));

}}

鍊錶 反轉單向鍊錶

思路 從第二個元素開始。1 刪除當前元素。2 把當前元素放到頭結點位置。其中需要宣告3個變數 headnode 頭結點 prenode 前乙個結點 currentnode 當前結點 具體步驟如圖所示 實現 反轉單鏈表方法實現類 created by liujinjin on 17 1 19.publ...

鍊錶1 單向鍊錶

鍊錶中最簡單的一種是單向鍊錶,它包含兩個域,乙個資料域和乙個指標域,指標域指向鍊錶中的下乙個節點,最後乙個節點的指標域指向乙個空值 鍊錶最基本的結構是在每個節點儲存資料和到下乙個節點的位址,在最後乙個節點儲存乙個特殊的結束標記,另外在乙個固定的位置儲存指向第乙個節點的指標,有的時候也會同時儲存指向最...

鍊錶 單向鍊錶

討論單鏈表之前,我們先來討論下面這個問題。順序表存在的一些問題 中間 頭部的插入刪除,時間複雜度為o n 增容需要申請新空間,拷貝資料,釋放舊空間。會有不小的消耗。增容一般是呈2倍的增長,勢必會有一定的空間浪費。例如當前容量為100,滿了以後增容到200,我們再繼續插入了5個資料,後面沒有資料插入了...