本篇主要是單向鍊錶題型的實戰,比如反轉單向鍊錶、查詢單向鍊錶的中間節點、判斷乙個鍊錶是否有環、合併兩個有序鍊錶、判斷乙個單向鍊錶是否是回文鍊錶。
/*** 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個資料,後面沒有資料插入了...