1.删除链表中等于给定值 val 的所有节点。 OJ链接
struct ListNode* removeElements(struct ListNode* head, int val){
struct ListNode* cur = head;
struct ListNode* prev = NULL;
while(cur)
{
if(cur->val == val)
{
struct ListNode* next = cur->next;
if(prev == NULL)
head = next;
else
prev->next = next;
free(cur);
cur = next;
}
else
{
prev = cur;
cur = cur->next;
}
}
return head;
}
2.反转一个单链表。(**头插**) OJ链接
struct ListNode* reverseList(struct ListNode* head){
struct ListNode* newH, * cur, *next;
cur = head;
newH = NULL;
while(cur)
{
next = cur->next;
cur->next = newH;
newH = cur;
cur = next;
}
return newH;
}
3.给定一个带有头结点 head 的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。(**快慢指针**)OJ链接
struct ListNode* middleNode(struct ListNode* head){
struct ListNode* fast,*slow;
fast = slow = head;
while(fast && fast->next)
{
slow = slow->next;
fast = fast->next->next;
}
return slow;
}
4.输入一个链表,输出该链表中倒数第k个结点。(**快慢指针**) OJ链接
ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) {
ListNode* slow, *fast;
fast = slow = pListHead;
while(k--)
{
if(fast)
fast = fast->next;
else
return NULL;
}
while(fast)
{
slow = slow->next;
fast = fast->next;
}
return slow;
}
单链表(快慢指针)
最新推荐文章于 2022-09-26 00:17:47 发布