1、反轉鍊錶
定義乙個函式,輸入乙個鍊錶的頭節點,反轉該鍊錶並輸出反轉後鍊錶的頭節點。
/** * definition for singly-linked list.
* function listnode(val) */
/*** @param head
* @return */
var reverselist = function
(head)
return
prev;
};
2、刪除鍊錶的某個節點
給定單向鍊錶的頭指標和乙個要刪除的節點的值,定義乙個函式刪除該節點。返回刪除後的鍊錶的頭節點。
/** * @param head
* @param val
* @return */
var deletenode = function
(head, val)
else
}return
res.next;//此時不能返回now,此時now指向鍊錶最後乙個元素。
};
3、合併排序後的鍊錶
輸入兩個遞增排序的鍊錶,合併這兩個鍊錶並使新鍊錶中的節點仍然是遞增排序的。
/** * @param l1
* @param l2
* @return */
var mergetwolists = function
(l1, l2)
else
res=res.next;//
res往後移
} res.next=l1==null?l2:l1;//最後
res指向不為空的鍊錶
return dum.next;//
不能返回res
};
4、鍊錶中倒數第k個數。
給定乙個鍊錶: 1->2->3->4->5, 和 k = 2.返回鍊錶 4->5.
/** * @param head
* @param k
* @return */
var getkthfromend = function
(head, k)
else
}return
slow;//slow既為返回結果
};
5、環形鍊錶
給定乙個鍊錶,判斷鍊錶中是否有環。
/** * @param head
* @return */
var hascycle = function
(head)
}return
false
;};
6、鍊錶陣列【中等】
給定煉表頭結點 head,該鍊錶上的每個結點都有乙個唯一的整型值 。同時給定列表 g,該列表是上述鍊錶中整型值的乙個子集。返回列表 g 中元件的個數,這裡對元件的定義為:鍊錶中一段最長連續結點的值(該值必須在列表 g 中)構成的集合。
輸入:head: 0->1->2->3->4
g = [1,3,4]
輸出: 2.
共有兩個連續陣列。1是乙個連續陣列,3、4是乙個連續陣列。
/** * @param head
* @param g
* @return */
var numcomponents = function
(head, g)
isconnect=true
; }
else
head=head.next;
}return
num;
};
資料結構 鍊錶 練習題1
2.已知乙個帶表頭結點的單鏈表,結點結構為data link,假設該鍊錶只給出了頭指標list。在不改變鍊錶的前提下,請設計乙個盡可能高效的演算法,查詢鍊錶中倒數第k個位置上的結點 k正為整數 若查詢成功,演算法輸出該結點的data域的值,並返回1 否則,只返回0.要求 1 描述演算法的基本設計思想...
資料結構練習題
設pa,pb分別指向兩個帶頭結點的有序 從小到大 單鏈表。仔細閱讀如下的程式,並回答問題 1 程式的功能 2 s1,s2中值的含義 3 pa,pb中值的含義。include include typedef struct list list void exam list pa,list pb else...
鍊錶練習題
鍊錶 這裡我記錄了鍊錶的各種操作的演算法,在後面的習題中會涉及到這些演算法的思路。leetcode206.反轉鍊錶 反轉乙個單鏈表。示例 輸入 1 2 3 4 5 null 輸出 5 4 3 2 1 null反序的演算法之前記錄過,可以就地反序,也可以使用棧反序,這裡為了節省時間和空間,就用就地反序...