日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

链表的一些leetcode题目+python(c++)

發布時間:2024/7/23 python 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 链表的一些leetcode题目+python(c++) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

主要常見下面幾個知識點:?

1-1.請編寫一個函數,使其可以刪除某個鏈表中給定的(非末尾)節點,你將只被給定要求被刪除的節點。

python:

# Definition for singly-linked list. # class ListNode: # def __init__(self, x): # self.val = x # self.next = Noneclass Solution:def deleteNode(self, node):""":type node: ListNode:rtype: void Do not return anything, modify node in-place instead."""node.val = node.next.valnode.next = node.next.next

c++實現:

/*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode(int x) : val(x), next(NULL) {}* };*/ class Solution { public:void deleteNode(ListNode* node) {node->val = node->next->val;node->next = node->next->next;} };

1-2.刪除排序鏈表中的重復元素

通過將結點的值與它之后的結點進行比較來確定它是否為重復結點。如果它是重復的,我們更改當前結點的 next 指針,以便它跳過下一個結點并直接指向下一個結點之后的結點。如果不是重復的,則節點進行下移。

# Definition for singly-linked list. # class ListNode: # def __init__(self, x): # self.val = x # self.next = Noneclass Solution:def deleteDuplicates(self, head: ListNode) -> ListNode:node = headwhile node and node.next:if node.val == node.next.val:node.next = node.next.nextelse:node = node.nextreturn head

c++實現:

/*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(nullptr) {}* ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/ class Solution { public:ListNode* new_node;Solution(){};Solution(const Solution& sol){this->new_node = new ListNode(0, NULL);this->new_node = sol.new_node;}//深拷貝 堆區開辟空間重新賦值 解決釋放內存的問題ListNode* deleteDuplicates(ListNode* head) {this->new_node = head;while(this->new_node && this->new_node->next){if(this->new_node->val == this->new_node->next->val){this->new_node->next = this->new_node->next->next;}else{this->new_node = this->new_node->next;}}return head;}virtual ~Solution(){if(this->new_node !=NULL){this->new_node = NULL;}} };

1-3.刪除排序鏈表中的重復元素 II

思路:通過while循環一直去掉重復的元素

python:

# Definition for singly-linked list. # class ListNode: # def __init__(self, val=0, next=None): # self.val = val # self.next = next class Solution:def deleteDuplicates(self, head: ListNode) -> ListNode:dummy_head = ListNode(0, head)cur = dummy_headwhile cur.next and cur.next.next:if cur.next.val == cur.next.next.val:x = cur.next.valwhile cur.next and cur.next.val == x:cur.next = cur.next.nextelse:cur = cur.nextreturn dummy_head.next

c++實現:?

/*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(nullptr) {}* ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/ class Solution { public:ListNode* dummy_head;ListNode* cur_node;Solution(){};Solution(const Solution& sol){dummy_head = sol.dummy_head;cur_node = sol.cur_node;}ListNode* deleteDuplicates(ListNode* head) {dummy_head = new ListNode(0, head);cur_node = dummy_head;while(cur_node->next && cur_node->next->next){if(cur_node->next->val == cur_node->next->next->val){int x = cur_node->next->val;while(cur_node->next && cur_node->next->val == x){cur_node->next = cur_node->next->next;}}else{cur_node = cur_node->next;}}return dummy_head->next;}virtual ~Solution(){if(dummy_head != NULL){delete dummy_head;dummy_head = NULL;}if(cur_node != NULL){cur_node = NULL;}} };

1-4.刪除鏈表的倒數第N個節點

思路:找到鏈表長度,通過在頭結點補充一個節點找到要刪除的節點的上一個節點,然后在進行刪除

方法1:循環

# Definition for singly-linked list. # class ListNode: # def __init__(self, val=0, next=None): # self.val = val # self.next = next class Solution:def removeNthFromEnd(self, head: ListNode, n: int) -> ListNode:length = 0 node = head#獲取鏈表長度while node:length+=1node= node.next# print(length)curr_length = 0new_head = ListNode(0)new_head.next = headnode2=new_headstop_length = length - n#循環走到要刪除節點的前一個節點while stop_length:stop_length-=1node2 = node2.next#跳過要刪除的節點即可node2.next = node2.next.nextreturn new_head.next

方法2:遞歸

# Definition for singly-linked list. # class ListNode: # def __init__(self, val=0, next=None): # self.val = val # self.next = next class Solution:def __init__(self):self.count = 0def removeNthFromEnd(self, head: ListNode, n: int) -> ListNode:if not head: return head head.next = self.removeNthFromEnd(head.next, n) # 遞歸調用self.count += 1 # 回溯時進行節點計數return head.next if self.count == n else head

方法3:雙指針

fist 指針與second指針相隔n,這樣first跑到尾部,second的下一個節點就是倒數第n個

# Definition for singly-linked list. # class ListNode: # def __init__(self, val=0, next=None): # self.val = val # self.next = next class Solution:# def __init__(self):# self.count = 0def removeNthFromEnd(self, head: ListNode, n: int) -> ListNode:new_head = ListNode(0)new_head.next = headfirst = headsecond = new_headfor i in range(n):first = first.nextwhile first:first = first.nextsecond = second.nextsecond.next = second.next.nextreturn new_head.next

c++實現:?

/*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(nullptr) {}* ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/ class Solution { public:ListNode* removeNthFromEnd(ListNode* head, int n) {ListNode* new_head = new ListNode(0);new_head ->next = head;ListNode* first = head;ListNode* second = new_head;for(int i=0;i<n;i++){first = first->next;}while(first){first = first->next;second = second->next;}second->next = second->next->next;return new_head->next;} };

1-5. 刪除鏈表的節點

思路:雙指針

# Definition for singly-linked list. # class ListNode: # def __init__(self, x): # self.val = x # self.next = None class Solution:def deleteNode(self, head: ListNode, val: int) -> ListNode:if head is None:return headnew_head = ListNode(0)new_head.next = headpre = new_headcur = headwhile cur.val != val:pre = curcur = cur.nextpre.next = cur.nextreturn new_head.next

c++實現:

/*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode(int x) : val(x), next(NULL) {}* };*/ class Solution { public:ListNode* deleteNode(ListNode* head, int val) {if(head == NULL){return NULL;}ListNode* new_head = new ListNode(0);new_head->next = head;ListNode* pre = new_head;ListNode* cur = head;while(cur->val != val){pre = cur;cur = cur->next;}pre->next = cur->next;return new_head->next;} };

1-6.兩兩交換鏈表中的節點

思路:迭代法

python代碼:?

# Definition for singly-linked list. # class ListNode: # def __init__(self, val=0, next=None): # self.val = val # self.next = next class Solution:def swapPairs(self, head: ListNode) -> ListNode:new_head = ListNode(0)new_head.next = headtemp = new_headwhile temp.next and temp.next.next:node1 = temp.nextnode2 = temp.next.nexttemp.next = node2node1.next = node2.nextnode2.next = node1temp = node1return new_head.next

c++實現:

/*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(nullptr) {}* ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/ class Solution { public:ListNode* swapPairs(ListNode* head) {ListNode* new_head = new ListNode(0);new_head->next = head;ListNode* temp = new_head;while(temp->next && temp->next->next){ListNode* head1 = temp->next;ListNode* head2 = temp->next->next;temp->next = head2;head1->next = head2->next;head2->next = head1;temp = head1;}return new_head->next;} };

思路:遞歸法

# Definition for singly-linked list. # class ListNode: # def __init__(self, val=0, next=None): # self.val = val # self.next = next class Solution:def swapPairs(self, head: ListNode) -> ListNode:if head is None or head.next is None:return headnew_head = head.nexthead.next = self.swapPairs(new_head.next)new_head.next = headreturn new_head

c++實現:?

/*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(nullptr) {}* ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/ class Solution { public:ListNode* swapPairs(ListNode* head) {if(head == nullptr || head->next == nullptr){return head;}ListNode* new_head;new_head = head->next;head->next = swapPairs(new_head->next);new_head->next = head;return new_head;} };

2-1.反轉鏈表

思路1:雙指針?

class Solution(object):def reverseList(self, head):""":type head: ListNode:rtype: ListNode"""# 申請兩個節點,pre和 cur,pre指向Nonepre = Nonecur = head# 遍歷鏈表,while循環里面的內容其實可以寫成一行while cur:# 記錄當前節點的下一個節點tmp = cur.next# 然后將當前節點指向precur.next = pre# pre和cur節點都前進一位pre = curcur = tmpreturn pre

c++實現:

/*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(nullptr) {}* ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/ class Solution { public:ListNode* reverseList(ListNode* head) {ListNode* pre = nullptr;ListNode* temp = head;while(head){temp = head->next;head->next = pre;pre = head;head = temp;}return pre;} };

思路2.遞歸法

# Definition for singly-linked list. # class ListNode: # def __init__(self, x): # self.val = x # self.next = Noneclass Solution:def reverseList(self, head: ListNode) -> ListNode:# pre = None# cur = head# while cur:# node = cur.next# cur.next = pre# pre = cur# cur = node# return preif head is None or head.next is None:return headnew_node = self.reverseList(head.next)print('head.val',head.val)head.next.next = headhead.next = Nonereturn new_node

2-2:旋轉鏈表

思路:

構成循環列表以后 找到移動的節點 在拆分

python:

# Definition for singly-linked list. # class ListNode: # def __init__(self, val=0, next=None): # self.val = val # self.next = next class Solution:def rotateRight(self, head: ListNode, k: int) -> ListNode:if k == 0 or head is None or head.next is None:return head#計算鏈表長度cur = head n = 1while cur.next:cur = cur.nextn += 1# print('==n:', n) add = n - k % nif add == n:#k是n的整數倍直接返回原節點return headcur.next = head #構成環while add:cur = cur.nextadd -= 1new_head = cur.next#找到移動后的開始節點cur.next = None#拆開return new_head

c++實現:

/*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(nullptr) {}* ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/ class Solution { public:ListNode* rotateRight(ListNode* head, int k) {if(k == 0 || head == nullptr || head->next == nullptr){return head;}int n = 1;//得到環長度ListNode* cur = head;while(cur->next){cur = cur->next;n++;}//找到移動的add長度int add = n - k % n;if(add == n){return head;}cur->next = head;//構成環while(add){cur = cur->next;add--;}ListNode* new_node = cur->next;cur->next = nullptr;//拆環return new_node;} };

3-1.合并兩個排序的鏈表

思路:引入一個指針頭 python實現

# Definition for singly-linked list. # class ListNode: # def __init__(self, x): # self.val = x # self.next = Noneclass Solution:def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode:head = ListNode(0)node = headwhile l1 and l2:if l1.val < l2.val:node.next = l1l1 = l1.nextelse:node.next = l2l2 = l2.nextnode = node.nextif l1 is not None:node.next= l1if l2 is not None:node.next= l2return head.next

c++實現:

/*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode(int x) : val(x), next(NULL) {}* };*/ class Solution { public:ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {ListNode* new_head = new ListNode(0);ListNode* node = new_head;while(l1!=NULL && l2 !=NULL){if(l1->val<l2->val){node->next = l1;l1 = l1->next;}else{node->next = l2;l2 = l2->next; }node = node->next;}if (l1!=NULL){node->next = l1;}if(l2!=NULL){node->next = l2;}return new_head->next;} };

思路:遞歸

/*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(nullptr) {}* ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/ class Solution { public:ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {if(l1 == nullptr){return l2;}if(l2 == nullptr){return l1;}if(l1->val < l2->val){l1->next = mergeTwoLists(l1->next, l2);return l1;}else{l2->next = mergeTwoLists(l1, l2->next);return l2;}} };

3-2.合并K個升序鏈表

思路1:上一題合并兩個變成for循環順序合并

# Definition for singly-linked list. # class ListNode: # def __init__(self, val=0, next=None): # self.val = val # self.next = next class Solution:def mergeTwo(self, l1, l2):if l1 is None:return l2if l2 is None:return l1head = ListNode(0)node = headwhile l1 and l2:if l1.val <l2.val:node.next = l1l1 = l1.nextelse:node.next = l2l2 = l2.nextnode = node.nextif l1:node.next = l1if l2:node.next = l2return head.nextdef mergeKLists(self, lists: List[ListNode]) -> ListNode:ans = Nonefor i in range(len(lists)):ans = self.mergeTwo(ans,lists[i])return ans

c++:

/*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(nullptr) {}* ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/ class Solution { public:ListNode* mergtwo(ListNode* l1, ListNode* l2){if(l1==nullptr){return l2;}if(l2==nullptr){return l1;}ListNode* new_head= new ListNode(0);ListNode* node = new_head;while(l1 && l2){if(l1->val<l2->val){node->next = l1;l1= l1->next;}else{node->next = l2;l2= l2->next;}node = node->next;}if(l1){node->next = l1;}if(l2){node->next = l2;}return new_head->next;}ListNode* mergeKLists(vector<ListNode*>& lists) {ListNode* res = nullptr;for (int i=0;i<lists.size();i++){res = mergtwo(res,lists[i]);}return res;} };

思路2:分治歸并1

# Definition for singly-linked list. # class ListNode: # def __init__(self, val=0, next=None): # self.val = val # self.next = next class Solution:def mergeTwo(self, l1, l2):if l1 is None:return l2if l2 is None:return l1head = ListNode(0)node = headwhile l1 and l2:if l1.val <l2.val:node.next = l1l1 = l1.nextelse:node.next = l2l2 = l2.nextnode = node.nextif l1:node.next = l1if l2:node.next = l2return head.nextdef mergeSort(self, lists, left, right):if left==right:return lists[left]middle = left + (right-left)//2# print('== middle:', middle)l1 = self.mergeSort(lists,left,middle)# print('== l1:', l1)l2 = self.mergeSort(lists,middle+1,right)return self.mergeTwo(l1, l2)def mergeKLists(self, lists: List[ListNode]) -> ListNode:# print('==hahah')if len(lists)==0:return Nonereturn self.mergeSort(lists,0,len(lists) - 1)

c++實現:?

/*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(nullptr) {}* ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/ class Solution { public:ListNode* mergetwo(ListNode* l1, ListNode* l2){if(l1==nullptr){return l2;}if(l2==nullptr){return l1;}ListNode* new_head= new ListNode(0);ListNode* node = new_head;while(l1 && l2){if(l1->val<l2->val){node->next = l1;l1= l1->next;}else{node->next = l2;l2= l2->next;}node = node->next;}if(l1){node->next = l1;}if(l2){node->next = l2;}return new_head->next;}ListNode* mergesort(vector<ListNode*>& lists,int left, int right){if(left==right){return lists[left];}int middle = left+(right -left)/2;ListNode* l1 = mergesort(lists,left,middle);ListNode* l2 = mergesort(lists,middle+1,right);return mergetwo(l1,l2);}ListNode* mergeKLists(vector<ListNode*>& lists) {// ListNode* res = nullptr;// for (int i=0;i<lists.size();i++){// res = mergtwo(res,lists[i]);// }// return res;if (lists.size()==0){return nullptr;}return mergesort(lists,0,lists.size()-1);} };

思路3:分支歸并2 參考排序算法的歸并排序 排序算法--(冒泡排序,插入排序,選擇排序,歸并排序,快速排序,桶排序,計數排序,基數排序)_智障變智能-CSDN博客

class Solution:def mergeTwo(self, l1, l2):if l1 is None:return l2if l2 is None:return l1head = ListNode(0)node = headwhile l1 and l2:if l1.val < l2.val:node.next = l1l1 = l1.nextelse:node.next = l2l2 = l2.nextnode = node.nextif l1:node.next = l1if l2:node.next = l2return head.nextdef mergeSort(self, L):if len(L) <= 1:return L[0]mid = len(L) // 2 l1 = self.mergeSort(L[:mid])l2 = self.mergeSort(L[mid:])return self.mergeTwo(l1, l2)def mergeKLists(self, lists: List[ListNode]) -> ListNode:if len(lists)==0:return Nonereturn self.mergeSort(lists)

3-3.合并兩個有序鏈表

思路:遞歸 終止條件就是節點為None.

1.遞歸法?

# Definition for singly-linked list. # class ListNode: # def __init__(self, val=0, next=None): # self.val = val # self.next = next class Solution:def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode:#遞歸的終止條件if l1 is None:return l2elif l2 is None:return l1 elif l1.val < l2.val:l1.next = self.mergeTwoLists(l1.next,l2)return l1else:l2.next = self.mergeTwoLists(l1,l2.next)return l2

2.迭代法:

# Definition for singly-linked list. # class ListNode: # def __init__(self, x): # self.val = x # self.next = Noneclass Solution:def mergeTwoLists(self, l1: ListNode, l2: ListNode) -> ListNode:fake_head_node = ListNode(0)cur = fake_head_nodewhile l1 and l2:if l1.val<l2.val:cur.next = l1l1 = l1.nextelse:cur.next = l2l2 = l2.next cur = cur.nextif l1:cur.next = l1else:cur.next = l2return fake_head_node.next

3-4.排序鏈表

思路1:歸并排序 先通過快慢指針找到中心點 進行截斷以后一直遞歸拆開 在進行合并即可

python代碼:

# Definition for singly-linked list. # class ListNode: # def __init__(self, val=0, next=None): # self.val = val # self.next = next class Solution:def merge(self, left, right):res = ListNode(0)temp = reswhile left and right:if left.val < right.val:temp.next, left = left, left.nextelse:temp.next, right = right, right.nexttemp = temp.nexttemp.next = left if left else rightreturn res.nextdef sortList(self, head: ListNode) -> ListNode:if head is None or head.next is None:return head #快慢指針找到鏈表中心點slow, fast = head, head.nextwhile fast and fast.next:fast, slow = fast.next.next, slow.nextmid, slow.next = slow.next, None#將找到的中心點進行截斷故 slow.next = Noneleft, right = self.sortList(head), self.sortList(mid)#遞歸一直進行拆分return self.merge(left, right)#合并操作

c++代碼:

/*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(nullptr) {}* ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/ class Solution { public:ListNode* mergetwo(ListNode* l1,ListNode* l2){ListNode* new_head = new ListNode(0);ListNode* node = new_head;while(l1 && l2){if(l1->val<l2->val){node->next = l1;l1 = l1->next;}else{node->next = l2;l2 = l2->next;}node = node->next;}if(l1){node->next = l1;}if(l2){node->next = l2;}return new_head->next;}ListNode* sortList(ListNode* head) {if(head==nullptr || head->next==nullptr){return head;}ListNode* slow = head;ListNode* fast = head->next;while(fast && fast->next){slow = slow->next;fast = fast->next->next;}ListNode* middle = slow->next;slow->next = nullptr;ListNode* l1 = sortList(head);ListNode* l2 = sortList(middle);return mergetwo(l1,l2);} };

思路2:合并也是遞歸

# Definition for singly-linked list. # class ListNode: # def __init__(self, val=0, next=None): # self.val = val # self.next = next class Solution:# def merge(self, left, right):# res = ListNode(0)# temp = res# while left and right:# if left.val < right.val:# temp.next, left = left, left.next# else:# temp.next, right = right, right.next# temp = temp.next# temp.next = left if left else right# return res.nextdef merge(self,left,right):if left is None:return rightif right is None:return leftif left.val < right.val:left.next = self.merge(left.next, right)return leftelse:right.next = self.merge(left, right.next)return rightdef sortList(self, head: ListNode) -> ListNode:if head is None or head.next is None:return head #快慢指針找到鏈表中心點slow, fast = head, head.nextwhile fast and fast.next:fast, slow = fast.next.next, slow.nextmid, slow.next = slow.next, None#將找到的中心點進行截斷故 slow.next = Noneleft, right = self.sortList(head), self.sortList(mid)#遞歸一直進行拆分return self.merge(left, right)#合并操作

3-5.兩數相加?

思路:開出一個head頭,利用一個指針進行遍歷,需要注意的是進位

# Definition for singly-linked list. # class ListNode: # def __init__(self, val=0, next=None): # self.val = val # self.next = next class Solution:def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:head = ListNode(0)new_node = headcarry = 0while l1 and l2:new_node.next =ListNode(l1.val+l2.val+carry)carry = new_node.next.val//10 new_node.next.val = new_node.next.val%10l1 = l1.nextl2= l2.nextnew_node = new_node.next# print(carry)while l1:new_node.next = ListNode(l1.val+carry)carry = new_node.next.val//10new_node.next.val = new_node.next.val%10l1 = l1.nextnew_node = new_node.nextwhile l2:new_node.next = ListNode(l2.val+carry)carry = new_node.next.val//10new_node.next.val = new_node.next.val%10l2 = l2.nextnew_node = new_node.nextif carry:new_node.next = ListNode(carry)return head.next

c++實現:

/*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(nullptr) {}* ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/ class Solution { public:ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {ListNode* head = new ListNode(0);ListNode* new_head = head;int carry = 0;while(l1 && l2){new_head->next = new ListNode(l1->val + l2->val + carry);carry = new_head->next->val/10;new_head->next->val = new_head->next->val%10; new_head = new_head->next;l1 = l1->next;l2 = l2->next;}while(l1){new_head->next = new ListNode(l1->val + carry);carry = new_head->next->val/10;new_head->next->val = new_head->next->val%10; new_head = new_head->next;l1 = l1->next;}while(l2){new_head->next = new ListNode(l2->val + carry);carry = new_head->next->val/10;new_head->next->val = new_head->next->val%10; new_head = new_head->next;l2 = l2->next;}if(carry){new_head->next = new ListNode(carry);}return head->next;} };

3-5.2?兩數相加 II

思路:在上一題基礎上加一個棧

python:

# Definition for singly-linked list. # class ListNode: # def __init__(self, val=0, next=None): # self.val = val # self.next = next class Solution:def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:value1,value2 = [], []while l1:value1.append(l1.val)l1 = l1.nextwhile l2:value2.append(l2.val)l2 = l2.nextcarry = 0res = Nonewhile len(value1) > 0 or len(value2) > 0 or carry != 0:if len(value1):temp_1 = value1.pop()else:temp_1 = 0if len(value2):temp_2 = value2.pop()else:temp_2 = 0cur = temp_1 + temp_2 + carrycarry = cur // 10cur %= 10node = ListNode(cur)node.next = resres = nodereturn res

c++實現:

/*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(nullptr) {}* ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/ class Solution { public:ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {stack<int> value1, value2;while(l1){value1.push(l1->val);l1 = l1->next;}while(l2){value2.push(l2->val);l2 = l2->next;}int carry = 0;ListNode* res = nullptr;while(!value1.empty() || !value2.empty() || carry != 0){int temp_1 = 0, temp_2 = 0;if(!value1.empty()){temp_1 = value1.top();value1.pop();}if(!value2.empty()){temp_2 = value2.top();value2.pop();}int cur = temp_1 + temp_2 + carry;carry = cur / 10;cur %= 10;ListNode* node = new ListNode(cur);node->next = res;res = node;}return res;} };

3-6.合并兩個鏈表

思路:找出被截斷的兩個鏈表點,開始節點指向要加入的鏈表,加入的鏈表在指向結束節點就行。

# Definition for singly-linked list. # class ListNode: # def __init__(self, val=0, next=None): # self.val = val # self.next = next class Solution:def mergeInBetween(self, list1: ListNode, a: int, b: int, list2: ListNode) -> ListNode:node = list1length = 0while list1:if length == a - 1:start = list1if length == b + 1:end = list1length += 1 list1 = list1.nextstart.next = list2while list2.next:list2 = list2.nextlist2.next = endreturn node

c++實現:

/*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(nullptr) {}* ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/ class Solution { public:ListNode* mergeInBetween(ListNode* list1, int a, int b, ListNode* list2) {ListNode* node = list1;ListNode* start; ListNode* end;int length = 0;while(list1){if(length == a-1){start = list1;}if(length == b+1){end = list1;}length++;list1 = list1->next;}start->next = list2;while(list2->next){list2 = list2->next;}list2->next = end;return node;} };

3-7. 重排鏈表

思路:利用線性表存儲該鏈表節點,然后利用線性表可以下標訪問的特點,直接按順序訪問指定元素,重建該鏈表即可。

# Definition for singly-linked list. # class ListNode: # def __init__(self, val=0, next=None): # self.val = val # self.next = next class Solution:def reorderList(self, head: ListNode) -> None:"""Do not return anything, modify head in-place instead."""nodes_list = []node = headwhile node:nodes_list.append(node)node = node.nextstart, end = 0, len(nodes_list) - 1while start < end:nodes_list[start].next = nodes_list[end]start += 1if start == end:breaknodes_list[end].next = nodes_list[start]end -= 1nodes_list[start].next = None

c++實現:

/*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(nullptr) {}* ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/ class Solution { public:void reorderList(ListNode* head) {vector<ListNode*> nodes_list;ListNode* node = head;while(node){nodes_list.push_back(node);node = node->next;}int start = 0, end = nodes_list.size() - 1;while(start < end){nodes_list[start]->next = nodes_list[end];start++;if(start == end){break;}nodes_list[end]->next = nodes_list[start];end--;}nodes_list[start]->next = nullptr;} };

4-1.環形鏈表

# Definition for singly-linked list. # class ListNode: # def __init__(self, x): # self.val = x # self.next = Noneclass Solution:def hasCycle(self, head: ListNode) -> bool:#快慢指針 人追人slow,fast = head,headwhile fast and fast.next:fast = fast.next.nextslow = slow.nextif slow==fast:return True return False

c++實現:

/*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode(int x) : val(x), next(NULL) {}* };*/ class Solution { public:bool hasCycle(ListNode *head) {ListNode* slow = head;ListNode* fast = head;while(fast && fast->next){slow = slow->next;fast = fast->next->next;if(slow == fast){return true;}}return false;} };

4-2.給定一個有環鏈表,實現一個算法返回環路的開頭節點。

假設有兩個指針,分別為快慢指針fast和slow, 快指針每次走兩步,慢指針每次前進一步,如果有環則兩個指針必定相遇;

反證法:假設快指針真的 越過 了慢指針,且快指針處于位置 i+1,而慢指針處于位置 i,那么在前一步,快指針處于位置 i-1,慢指針也處于位置 i-1,它們相遇了。

A:鏈表起點
B:環起點
C:相遇點
X:環起點到相遇點距離
Y:鏈表起點到環起點距離
R:環的長度
S:第一次相遇時走過的路程

1.慢指針slow第一次相遇走過的路程 S1 = Y + X;(11)
快指針fast第一次相遇走過的路程 S2=2S1 = Y + X + NR;(2)
說明:快指針的速度是慢指針的兩倍,相同時間內路程應該是慢指針的兩倍,Y + X + NR是因為快指針可能經過N圈后兩者才相遇;
把(1)式代入(2)式得:Y = NR -X;?

2..在將慢指針回到A點,滿指針和快指針同時走,在B點相遇,此處就是環節點.

# Definition for singly-linked list. # class ListNode: # def __init__(self, x): # self.val = x # self.next = Noneclass Solution:def detectCycle(self, head: ListNode) -> ListNode:slow = headfast = head;while fast:if fast and fast.next:slow = slow.nextfast = fast.next.nextelse:return Noneif slow==fast:breakif fast ==None or fast.next==None:return Noneslow= headwhile slow!=fast:slow = slow.nextfast = fast.nextreturn slow

c++實現:

/*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode(int x) : val(x), next(NULL) {}* };*/ class Solution { public:ListNode *detectCycle(ListNode *head) {ListNode* slow = head;ListNode* fast = head;while(fast){if(fast && fast->next){slow = slow->next;fast = fast->next->next;}else{return NULL;}if(slow==fast){break;}}if(!fast || !fast->next){return NULL;}slow = head;while(slow!=fast){slow = slow->next;fast = fast->next;}return slow;} };

4-3.鏈表相交

如這題應該是比較明顯的雙指針題,要是能實現一種算法讓兩個指針分別從A和B點往C點走,兩個指針分別走到C后,又各自從另外一個指針的起點,也就是A指針第二次走從B點開始走,B指針同理,這樣,A指針走的路徑長度 AO + OC + BO 必定等于B指針走的路徑長度 BO + OC + AO,這也就意味著這兩個指針第二輪走必定會在O點相遇,相遇后也即到達了退出循環的條件,代碼如下:

# Definition for singly-linked list. # class ListNode: # def __init__(self, x): # self.val = x # self.next = Noneclass Solution:def getIntersectionNode(self, headA: ListNode, headB: ListNode) -> ListNode:index_a = headAindex_b = headBwhile index_a !=index_b:if index_a !=None:index_a = index_a.nextelse:index_a = headBif index_b != None:index_b = index_b.nextelse:index_b = headAreturn index_a

c++實現:

/*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode(int x) : val(x), next(NULL) {}* };*/ class Solution { public:ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {ListNode* node_A = headA;ListNode* node_B = headB;while(node_A!=node_B){if(node_A!=NULL){node_A=node_A->next;}else{node_A = headB;}if(node_B!=NULL){node_B=node_B->next;}else{node_B = headA;}}return node_A;} };

4-4.兩個鏈表的第一個公共節點

思路:雙指針 兩個指針輪流走一遍各自的路程,這樣相遇就是公共節點,對于沒有公共節點的情況,所以需要判斷自身節點不是none,而不是.next是none,在去交換指針,否則會陷入無窮循環,而此時輸出就是none。

python

# Definition for singly-linked list. # class ListNode: # def __init__(self, x): # self.val = x # self.next = Noneclass Solution:def getIntersectionNode(self, headA: ListNode, headB: ListNode) -> ListNode:first_head = headAsecond_head = headBwhile first_head !=second_head:if first_head is not None:first_head = first_head.next else:first_head = headBif second_head is not None:second_head = second_head.nextelse:second_head = headA# print(first_head)return first_head

c++:

/*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode(int x) : val(x), next(NULL) {}* };*/ class Solution { public:ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {ListNode *first_node;first_node = headA;ListNode *second_node;second_node= headB;while(first_node != second_node){if(first_node !=NULL){first_node = first_node->next;}else{first_node = headB;}if(second_node !=NULL){second_node = second_node->next;}else{second_node = headA;}}return first_node;} };

5-1.輸入一個鏈表的頭節點,從尾到頭反過來返回每個節點的值(用數組返回)。

1.借用棧

# Definition for singly-linked list. # class ListNode: # def __init__(self, x): # self.val = x # self.next = Noneclass Solution:def reversePrint(self, head: ListNode) -> List[int]:stack = []while head:stack.append(head.val)head = head.nextreturn stack[::-1]

c++:

/*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode(int x) : val(x), next(NULL) {}* };*/ class Solution { public:vector<int> reversePrint(ListNode* head) {vector<int> res;while(head){res.push_back(head->val);head = head->next;}reverse(res.begin(),res.end());return res;} };

2.遞歸回溯

# Definition for singly-linked list. # class ListNode: # def __init__(self, x): # self.val = x # self.next = Noneclass Solution:def reversePrint(self, head: ListNode) -> List[int]:if head:return self.reversePrint(head.next)+[head.val]else:return []

5-2.請判斷一個鏈表是否為回文鏈表

利用列表將列表值進行拷貝,在判斷是否是回文字符串

# Definition for singly-linked list. # class ListNode: # def __init__(self, x): # self.val = x # self.next = Noneclass Solution:def isPalindrome(self, head: ListNode) -> bool:stack= []while head:stack.append(head.val)head = head.nextreturn stack==stack[::-1]

c++實現:

/*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(nullptr) {}* ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/ class Solution { public:bool isPalindrome(ListNode* head) {vector<int> res;while(head){res.push_back(head->val);head = head->next;}int left=0;int right=res.size()-1;while(left<right){if(res[left]==res[right]){left+=1;right-=1;}else{return false;}}return true;} };

5-3.分隔鏈表

思路:開出兩個大小節點,用于指向大于x和小于x的,遍歷結束以后在合并即可

# Definition for singly-linked list. # class ListNode: # def __init__(self, x): # self.val = x # self.next = Noneclass Solution:def partition(self, head: ListNode, x: int) -> ListNode:small_head = ListNode(0)large_head = ListNode(0)small_node = small_headlarge_node = large_headwhile head:if head.val < x:small_node.next = headsmall_node = small_node.nextelse:large_node.next = headlarge_node = large_node.nexthead= head.nextlarge_node.next = Nonesmall_node.next = large_head.nextreturn small_head.next

c++寫法:

/*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(nullptr) {}* ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/ class Solution { public:ListNode* partition(ListNode* head, int x) {ListNode* small_head = new ListNode(0);ListNode* big_head = new ListNode(0);ListNode* small_node =small_head;ListNode* big_node = big_head;while(head){if (head->val<x){small_node->next = head; small_node = small_node->next;}else{big_node->next = head;big_node = big_node->next;}head = head->next;}big_node->next = nullptr;small_node->next = big_head->next;return small_head->next;} };

6-1.二叉樹展開為鏈表

思路:可看出是根據前序遍歷的節點統統放在右子樹上

# Definition for a binary tree node. # class TreeNode: # def __init__(self, val=0, left=None, right=None): # self.val = val # self.left = left # self.right = right class Solution:def help(self, node):if node is not None:self.res.append(node)self.help(node.left)self.help(node.right)def flatten(self, root: TreeNode) -> None:"""Do not return anything, modify root in-place instead."""self.res = []self.help(root)# print(self.res)length = len(self.res)for i in range(1,length):pre,cur = self.res[i-1],self.res[i]pre.left = Nonepre.right = curreturn root

c++實現:

/*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/ class Solution { public:vector<TreeNode* >res;void help(TreeNode* node){if(node){res.push_back(node);help(node->left);help(node->right);}}void flatten(TreeNode* root) {help(root);for(int i=1;i<res.size();i++){TreeNode* pre = res[i-1];TreeNode* cur = res[i];pre->left = nullptr;pre->right = cur;}// return root;} };

雙向鏈表例題:

7-1:LRU 緩存機制

思路:雙向鏈表,這樣優先將get的移到頭部

class Node:def __init__(self, key=0, value=0):self.key = keyself.value = valueself.prev = Noneself.next = Noneclass LRUCache:def __init__(self, capacity: int):self.cache = {}self.head = Node()self.tail = Node()self.head.next = self.tailself.tail.prev = self.headself.capacity = capacityself.size = 0def get(self, key: int) -> int:if key not in self.cache:return -1# 如果 key 存在,先通過哈希表定位,再移到頭部node = self.cache[key]self.moveToHead(node)return node.valuedef put(self, key: int, value: int) -> None:if key not in self.cache:# 如果 key 不存在,創建一個新的節點node = Node(key, value)# 添加進哈希表self.cache[key] = node# 添加至雙向鏈表的頭部self.addToHead(node)self.size += 1if self.size > self.capacity:# 如果超出容量,刪除雙向鏈表的尾部節點removed = self.removeTail()# 刪除哈希表中對應的項self.cache.pop(removed.key)self.size -= 1else:# 如果 key 存在,先通過哈希表定位,再修改 value,并移到頭部node = self.cache[key]node.value = valueself.moveToHead(node)def addToHead(self, node):node.prev = self.headnode.next = self.head.nextself.head.next.prev = nodeself.head.next = nodedef removeNode(self, node):node.prev.next = node.nextnode.next.prev = node.prevdef moveToHead(self, node):self.removeNode(node)self.addToHead(node)def removeTail(self):node = self.tail.prevself.removeNode(node)return node

總結

以上是生活随笔為你收集整理的链表的一些leetcode题目+python(c++)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

天堂在线一区二区 | 国产一区二区在线免费视频 | 91九色精品女同系列 | 久久久免费精品视频 | 丁香花在线视频观看免费 | 久久久久亚洲精品成人网小说 | 午夜视频一区二区三区 | 欧美午夜性生活 | 色婷婷视频 | 精品国产一区二区三区不卡 | 久久久久这里只有精品 | 国产精品美女久久久 | 欧美精品一区二区免费 | 亚洲激情综合 | 天天操天天干天天摸 | www久久| 欧美a级片网站 | 久久精品99视频 | 久久亚洲精品电影 | 国产黄a三级三级 | 91精品国产高清自在线观看 | 中文字幕在线第一页 | 国产裸体视频网站 | 视频在线观看入口黄最新永久免费国产 | 91久久精| 色综合久久久网 | www.888.av| 中文字幕日韩国产 | 黄色av电影网 | 欧美日韩大片在线观看 | 免费看黄在线 | 久草在线国产 | 在线国产一区 | 美女国产在线 | 欧美天堂视频在线 | 91桃花视频 | 国产99久久久国产精品成人免费 | 激情综合五月婷婷 | 91av小视频 | 国产最新视频在线观看 | 在线激情电影 | 蜜桃av人人夜夜澡人人爽 | 91精品第一页 | 日韩一区二区久久 | 波多野结衣精品在线 | av三区在线 | 成人免费观看视频大全 | 特级a老妇做爰全过程 | 国产99一区视频免费 | 日韩天堂网 | 在线视频日韩 | 97在线看| 国产精品中文字幕在线 | 日日夜夜免费精品视频 | 亚洲资源在线观看 | 久久午夜免费观看 | 亚洲伊人av| 日本mv大片欧洲mv大片 | 午夜精品久久 | 久久久久久久国产精品视频 | 99精品欧美一区二区 | 中文字幕日韩在线播放 | 男女免费视频观看 | 亚洲精品永久免费视频 | 91精品啪在线观看国产81旧版 | 日韩com| 2017狠狠干| 国产精品成人国产乱 | 美女黄视频免费看 | 91成人精品一区在线播放69 | 黄色毛片视频免费观看中文 | 亚洲h视频在线 | 在线观看免费色 | 国产一区二区三区四区在线 | 碰碰影院| av九九九| 久久色中文字幕 | 在线亚洲欧美视频 | 日本一区二区三区视频在线播放 | 麻豆国产视频下载 | 狠狠色噜噜狠狠狠狠2022 | 国产黄色精品网站 | 色综合久久久久综合99 | 亚洲自拍av在线 | 精品中文字幕在线观看 | 91香蕉视频720p | 精品免费国产一区二区三区四区 | 精品视频免费看 | 国产一区免费在线 | 成人午夜网 | 999ZYZ玖玖资源站永久 | 97色资源| 天天色综合天天 | 国产高清99 | 高清av免费一区中文字幕 | 国产一区二区三区四区大秀 | 香蕉视频91 | 干av在线| 亚洲精品乱码白浆高清久久久久久 | 国产91精品一区二区麻豆亚洲 | 日韩午夜在线 | 精品一区电影 | 操操操com | 日日干天天爽 | 国产精品一区二区三区久久久 | 在线观看免费一区 | 一区二区不卡在线观看 | 91丨九色丨蝌蚪丰满 | 97在线观看免费 | 91av在线精品| 99精品热 | 国产99久久久国产精品免费二区 | 婷婷丁香七月 | 992tv在线观看 | 国产精品99久久久久人中文网介绍 | 国产中文字幕亚洲 | 91精品一区国产高清在线gif | 激情伊人五月天 | 人人躁 | 亚洲精品视频在线观看免费视频 | 99久久超碰中文字幕伊人 | 精品亚洲网| 人人插人人澡 | 在线超碰av | 中文字幕免 | 国产精品激情偷乱一区二区∴ | 成人免费观看视频网站 | 欧美日韩xxxxx| 国产高清av在线播放 | 免费色视频网址 | 夜夜干天天操 | 亚洲国产精品成人精品 | 欧美黄污视频 | 精品a视频| 成人在线免费视频 | 激情久久五月天 | 又黄又刺激的网站 | 中文字幕av电影下载 | 国产免费久久av | 九九九在线 | 亚洲欧洲成人 | 亚洲精品在线观看网站 | 成人久久久久久久久 | 黄色视屏在线免费观看 | 五月婷婷丁香在线观看 | 国产精品美女久久久久久 | 国产91免费观看 | 91麻豆精品一区二区三区 | 中文字幕在线观看视频免费 | 黄色成品视频 | 91色在线观看 | 亚洲国产黄色 | 伊人久久电影网 | 国偷自产中文字幕亚洲手机在线 | 国产一级视频免费看 | 超级碰碰碰视频 | 亚洲 欧美 国产 va在线影院 | 色av色av色av | 久久情爱 | 成片视频免费观看 | 麻豆传媒视频在线 | 人人爽人人爽人人片av免 | 久爱精品在线 | 免费观看黄色12片一级视频 | av电影一区 | 欧美精品一区二区免费 | 免费精品在线 | 久操97| 成人av教育 | 日韩欧美高清一区二区三区 | 成人蜜桃视频 | 在线观看成人福利 | 国产精品18videosex性欧美 | 精品国产乱码久久久久久三级人 | 91亚洲欧美| 国产一区二区三区免费在线观看 | 欧美一级免费在线 | 婷婷色亚洲 | 91av在线电影 | 日韩影视精品 | 天天草夜夜 | 成人动漫一区二区三区 | 91大神在线观看视频 | 中文字幕在线观看一区二区三区 | 狠狠干美女 | 91九色成人蝌蚪首页 | 午夜av不卡 | 精品国产乱码久久久久久1区二区 | 人人爽人人爽人人片av | 99热在 | 亚洲高清视频在线观看免费 | 探花视频在线观看免费 | 国产美女在线观看 | 波多野结衣视频一区二区三区 | 91视频com | 黄色亚洲大片免费在线观看 | 99这里只有精品视频 | 日本精品在线视频 | 久久久久激情 | 久久丝袜视频 | 91高清完整版在线观看 | 男女精品久久 | 亚洲性少妇性猛交wwww乱大交 | 国产一区在线看 | 成人免费在线视频观看 | 国产最新视频在线 | 96精品高清视频在线观看软件特色 | 免费av网址大全 | 麻豆精品在线视频 | 精品免费在线视频 | 日韩欧美成人网 | 欧美在线aa | 国产精品 中文字幕 亚洲 欧美 | 国产福利在线不卡 | 日韩精品一区二 | 中文字幕视频网站 | 免费国产在线精品 | free,性欧美 九九交易行官网 | 成人国产网址 | 国内外激情视频 | 欧美一级免费黄色片 | 久久久久久蜜av免费网站 | 婷婷免费视频 | 中文字幕日韩免费视频 | 麻豆果冻剧传媒在线播放 | 依人成人综合网 | 成人小视频在线观看免费 | 天天色视频 | 丁香网五月天 | 婷婷六月丁 | 麻豆成人在线观看 | 99热这里只有精品1 av中文字幕日韩 | 精品自拍av | 91在线免费播放视频 | 亚洲三级在线播放 | 欧美日韩不卡在线 | 97天天综合网 | 91麻豆免费视频 | 国产亚洲视频在线 | 天天操天天综合网 | 九九免费在线观看 | 国精产品一二三线999 | 久久精品亚洲精品国产欧美 | av7777777 | 成人亚洲网| 久久亚洲精品国产亚洲老地址 | 黄色三级视频片 | 国产高清综合 | 99热最新精品 | 久久a久久| 欧美日韩不卡在线观看 | av手机版| 中文字幕中文字幕在线中文字幕三区 | av中文字幕日韩 | 久久久久在线 | 久久人操 | 欧美婷婷综合 | 国产高清在线免费观看 | 波多野结衣一区三区 | 黄色毛片视频免费 | 久久午夜电影院 | 高清有码中文字幕 | 中文字幕日韩伦理 | 成人a级免费视频 | 国产一级片久久 | 亚洲成人av一区 | 密桃av在线| 日韩欧美高清在线 | 婷婷中文字幕综合 | 免费色av| 最近中文字幕mv免费高清在线 | 欧美日韩另类在线观看 | 久久精品9| 亚洲男男gaygay无套 | 国产不卡av在线 | 黄色av网站在线免费观看 | 天天干天天摸 | 黄色av电影一级片 | 色丁香综合| 在线免费观看的av网站 | 国产成人精品综合久久久久99 | 久久久www免费电影网 | 天天操人人要 | 奇米影视999 | 在线免费亚洲 | 欧美日韩免费在线视频 | 黄色毛片视频免费观看中文 | 久久免费看毛片 | 亚洲一区天堂 | 最新国产在线观看 | 久草在线视频资源 | 久久电影国产免费久久电影 | 亚洲成人精品在线观看 | 91在线视频免费 | 中文字幕日韩av | 又紧又大又爽精品一区二区 | av丝袜美腿 | 国产精品久久久久国产a级 激情综合中文娱乐网 | 国产精品久久久久久久免费 | 久久精品牌麻豆国产大山 | 免费av看片 | 免费看一级黄色大全 | 一区二区三区不卡在线 | 国产在线精品视频 | 国产一级高清 | 黄色在线观看免费网站 | 久草在线免费播放 | 日韩精品短视频 | 人人爽人人干 | 久久字幕精品一区 | 国产中文欧美日韩在线 | 欧美九九九 | 国产精品区二区三区日本 | 国产精品精品 | 在线国产高清 | 成年人黄色免费看 | 色偷偷中文字幕 | 免费精品视频在线观看 | 国产精品一区二区吃奶在线观看 | 国产精品videossex国产高清 | 中文字幕免费高清 | 亚洲精品91天天久久人人 | 国产一级二级视频 | 在线免费观看视频一区二区三区 | 国产在线免费观看 | 欧美一级黄色视屏 | 免费观看丰满少妇做爰 | 毛片网站在线看 | 高清av在线免费观看 | 国产999视频 | 日韩欧美视频二区 | 狠狠狠色狠狠色综合 | 99在线视频精品 | 亚洲精品动漫在线 | 久久中文字幕在线视频 | 欧美日韩国产一区二区在线观看 | wwwwww色| 久久夜夜夜 | 国产精品不卡视频 | av黄色免费看| 久久九九国产视频 | 在线观看av中文字幕 | 久久久久欠精品国产毛片国产毛生 | 中文不卡视频在线 | 91看片一区二区三区 | 国产精品扒开做爽爽的视频 | 天天鲁天天干天天射 | 色婷婷www | 午夜在线免费视频 | 99中文字幕视频 | 成人午夜电影免费在线观看 | 在线视频专区 | 久久成人亚洲欧美电影 | 亚洲国产精品第一区二区 | 人人干天天干 | 99视频在线| 日本女人在线观看 | av 一区二区三区 | 免费在线一区二区 | 久久精品影视 | 91c网站色版视频 | 亚洲综合色视频在线观看 | 久久免费视频这里只有精品 | 国产成人精品一区二区三区网站观看 | 久久精品综合一区 | av无限看 | 国产又黄又爽又猛视频日本 | 日韩一区二区三区不卡 | 国产精品免费久久 | 天天操天天综合网 | 成人免费视频免费观看 | 国产真实在线 | 日韩av中文在线观看 | 欧美 亚洲 另类 激情 另类 | 深爱激情五月网 | 亚洲精品字幕在线观看 | 亚州五月 | 免费网站看v片在线a | 日韩免费一区 | 天天操夜操视频 | 91福利小视频 | 免费欧美精品 | 欧美日韩精品在线播放 | 999精品网| 在线 国产 日韩 | 在线影院 国内精品 | 天天搞夜夜骑 | 久久久网 | 天天操导航 | 日韩r级电影在线观看 | 毛片永久新网址首页 | 黄色三几片 | www.色五月.com| 欧美色久 | 九九爱免费视频 | 成人黄色毛片 | 亚洲精品999 | 91香蕉视频黄 | 国产精品一区二区三区免费看 | 久草网视频在线观看 | 狠狠激情中文字幕 | 91精品第一页 | 99国产视频在线 | 国产在线视频一区二区 | 欧美精品久久久久久久亚洲调教 | 亚洲精品美女久久久久网站 | 欧美日韩在线观看一区二区三区 | 果冻av在线 | 精品久久久久国产 | 亚洲成aⅴ人在线观看 | 色妞色视频一区二区三区四区 | 国产精品不卡在线 | 国产成年人av | 国产精品小视频网站 | 精品一区二区三区久久 | 久久中文视频 | 中文字幕在线视频免费播放 | 成人午夜av电影 | 天堂视频中文在线 | 久久精品看片 | 日韩av区 | 九七在线视频 | 日韩精品无码一区二区三区 | 亚洲精品免费观看 | 欧美色图亚洲图片 | 日韩福利在线观看 | 久久久免费精品 | 天天操天天摸天天干 | 亚洲一区av | 精品综合久久 | 狠狠干激情 | www.av中文字幕.com | 91系列在线| 国产99在线免费 | 91手机视频 | 国产黑丝一区二区三区 | 国产一卡二卡四卡国 | 午夜美女视频 | 高潮久久久 | 日韩在线观看网址 | 日免费视频| www.av小说 | 亚洲国产成人在线 | 激情综合中文娱乐网 | 国产日韩欧美在线观看视频 | 91成人精品一区在线播放 | 91精品国产91 | 久久综合久久综合这里只有精品 | 国产精品2019 | 欧美日韩中文在线 | 人人射人人插 | 黄色国产在线 | 国产精品毛片完整版 | 99免在线观看免费视频高清 | 最近中文字幕视频网 | 91成人网页版 | 欧美精品一区二区性色 | www.福利| 欧美怡红院视频 | 91精品秘密在线观看 | 91精品国产乱码久久 | 国产黄色片免费看 | 91chinese在线 | 91热这里只有精品 | 久久激情视频 | 国产一二三区在线观看 | 激情五月婷婷综合 | 在线免费精品视频 | 日日日操| 天天色欧美 | 午夜精品久久 | 国产精品嫩草影院123 | 亚洲一级片 | 精品一区二区三区久久 | 97人人模人人爽人人喊中文字 | 香蕉视频日本 | 成人在线免费小视频 | 国产精品成人一区二区 | 成人黄色国产 | 欧美日韩中文在线观看 | 在线观看你懂的网址 | 亚洲国产精品人久久电影 | 五月天堂色| 在线看黄网站 | 久草视频网 | 欧美精品久久人人躁人人爽 | 毛片激情永久免费 | 国产精品专区h在线观看 | 丝袜精品视频 | 国产精品美女在线 | 开心激情综合网 | 在线国产一区 | 伊人五月综合 | 中文字幕在线观看资源 | 国产午夜亚洲精品 | 日韩美在线 | 91成人精品国产刺激国语对白 | 97天天干 | 9999在线视频| 久久综合视频网 | 男女精品久久 | 91中文字幕在线 | 奇米影音四色 | 999电影免费在线观看2020 | 久久香蕉国产 | 特级黄色电影 | 欧美日韩高清一区二区 | 国产精品99久久久久久人免费 | 婷婷99 | 夜色资源网 | 性色va | 亚洲另类视频 | 国产福利久久 | 97超碰站 | 国产96av| 日韩网站在线播放 | 美女免费视频网站 | 激情av综合 | 二区精品视频 | 成人av网站在线 | 久久99国产综合精品免费 | 国产黄色在线观看 | 18国产精品白浆在线观看免费 | av 一区二区三区四区 | 手机在线观看国产精品 | 精品一区二区免费在线观看 | 国产九九热视频 | 日韩高清免费在线 | 日韩免费在线观看视频 | av性网站| 国产一级在线观看 | 美女网站视频久久 | 激情综合狠狠 | 成人午夜电影在线播放 | 亚州国产精品视频 | 国产精品综合久久久久久 | 在线观看中文av | 香蕉视频4aa | 久久这里只有精品视频首页 | 激情五月婷婷激情 | 91精品一区二区在线观看 | 欧美精品久久人人躁人人爽 | 国产一级视屏 | 激情五月婷婷网 | 天天色天天色天天色 | 婷婷丁香花 | 综合色天天 | 91福利社区在线观看 | 精品亚洲一区二区三区 | 久久国产a | 日本精品二区 | av成人在线播放 | 伊人久操 | 国产免费影院 | 欧美激情va永久在线播放 | 中文字幕在线观看三区 | 亚洲欧美在线综合 | 欧美国产日韩一区二区三区 | 特级西西444www大精品视频免费看 | 91c网站色版视频 | 伊人久久在线观看 | 国产专区一 | 另类老妇性bbwbbw高清 | 一区二区在线不卡 | 91av电影 | 亚洲国产精久久久久久久 | 国产在线不卡精品 | 三级黄色大片在线观看 | 在线看中文字幕 | av丁香花 | 97精品国产一二三产区 | 999成人免费视频 | 激情久久久久 | 日日夜日日干 | 五月天综合 | www婷婷 | 在线观看免费成人 | 午夜精品电影 | 久久久亚洲国产精品麻豆综合天堂 | 亚洲精品男女 | 激情综合色综合久久 | 美女网站久久 | 五月婷社区| 国产精品99久久久久的智能播放 | 亚洲精品在线播放视频 | 日韩av一区二区三区四区 | 亚洲干视频在线观看 | 国产三级国产精品国产专区50 | 日日干夜夜草 | av网站手机在线观看 | 亚洲欧美视频在线 | 少妇超碰在线 | av综合站 | 国产精品va在线播放 | 黄色毛片视频免费观看中文 | 亚洲精品影视在线观看 | 三级免费黄色 | 天天躁日日躁狠狠躁 | 亚洲成人午夜av | 在线你懂的视频 | 嫩草av在线| 欧美精品久久久久性色 | 99热精品在线观看 | 中文字幕观看av | 婷婷精品 | www久久 | 国产成人精品av在线 | 国产小视频免费观看 | 天天操天天干天天综合网 | 国产91免费观看 | 国产无遮挡猛进猛出免费软件 | av电影免费在线看 | 91网站观看 | 97在线视频免费 | 91免费观看 | 亚洲黄色av一区 | 成人免费观看视频网站 | 在线播放国产一区二区三区 | 欧美最新另类人妖 | 日韩av二区 | 黄色福利视频网站 | а天堂中文最新一区二区三区 | 亚洲做受高潮欧美裸体 | 国产一级片免费播放 | a在线观看免费视频 | 国产精品中文字幕av | 日本99久久 | 成年人视频在线免费播放 | 色偷偷97 | 久久国产精品区 | 国产精品久久久久久一区二区三区 | 制服丝袜一区二区 | 丝袜精品视频 | 99久久精品视频免费 | 日韩最新理论电影 | 天天干,天天草 | 国产97在线看| 国产精品原创av片国产免费 | 91av综合| 国内偷拍精品视频 | 日韩高清毛片 | 久久伦理| 久久免费视频6 | 日韩视频一区二区三区在线播放免费观看 | 九九热re | 人人爽人人av | 久久精品5 | 97在线成人 | 操操操操网 | 91精品办公室少妇高潮对白 | 麻豆91精品 | 99操视频 | 亚洲一区二区视频在线播放 | 日本在线观看中文字幕 | 国产99久久精品一区二区300 | 午夜精品久久久久99热app | 人人澡人人澡人人 | 国产高清视频在线播放 | 中文字幕一区二区三区在线播放 | 国产亚洲午夜高清国产拍精品 | 国产在线精品观看 | 日产中文字幕 | 国产一区二区三精品久久久无广告 | 国产综合精品久久 | 久久人人97超碰精品888 | 又黄又爽免费视频 | 国产亚洲精品美女 | 国产精品一区二区麻豆 | 五月婷影院 | 超碰日韩 | 一级性视频 | 在线免费观看黄色小说 | 91精品国产自产老师啪 | 天天干夜夜夜 | 国产专区欧美专区 | 国产91精品久久久久 | 色综合咪咪久久网 | 最近中文字幕完整视频高清1 | 国产91精品看黄网站 | 久久新| 日韩三级精品 | 波多野结衣亚洲一区二区 | 欧美亚洲一区二区在线 | 国产成人精品一区二区三区在线 | 蜜臀aⅴ国产精品久久久国产 | 视频在线观看入口黄最新永久免费国产 | 欧美污在线观看 | 国产高清不卡 | 黄色软件视频大全免费下载 | 18国产精品白浆在线观看免费 | 色资源网在线观看 | 中文字幕日本在线 | 亚洲麻豆精品 | 91成人午夜 | 香蕉视频网站在线观看 | 日本一区二区三区免费观看 | 91av视频在线观看 | 成人免费色 | 婷婷久久五月天 | 99精品免费久久久久久久久 | 亚洲一区二区视频在线 | 国产精品免费观看在线 | 成人黄色在线电影 | 久久色亚洲 | 中文字幕在线观看1 | 国产一级二级三级视频 | 欧美孕妇与黑人孕交 | 少妇资源站| 九色视频网 | 亚洲色视频 | 丁香六月天 | 久久九九国产视频 | 在线国产日本 | 国产午夜不卡 | 99热在线观看 | 亚洲永久精品在线观看 | 2019中文字幕网站 | 麻豆视频在线观看免费 | 国产精品久久久777 成人手机在线视频 | 国产精品嫩草影视久久久 | 99av国产精品欲麻豆 | 久久国产精品久久国产精品 | 最新中文在线视频 | 樱空桃av | 综合久久综合久久 | 国产精品美女免费 | 国产aa精品 | 国产剧情一区二区 | 在线免费色 | 中文不卡视频 | 成人a级大片| 日韩av一区二区三区 | 日本乱码在线 | 国产精久久久久久妇女av | 久草视频在线资源站 | 高清av免费看| 国产999精品久久久久久麻豆 | 欧美一级片 | 在线日韩一区 | 91成人黄色 | av亚洲产国偷v产偷v自拍小说 | 欧美网站黄色 | 高潮久久久久久 | 粉嫩av一区二区三区四区五区 | 欧美日韩精品在线观看 | 97爱| 婷婷六月在线 | 亚洲成色777777在线观看影院 | 国内精品视频在线 | 国产精品福利午夜在线观看 | 国产成人久 | 国产成人精品一区二 | 99在线免费视频观看 | 毛片网站免费在线观看 | 中文字幕在线看视频国产中文版 | 人人干在线观看 | 久久免费视频精品 | 久久久精品综合 | 亚州av成人 | www色婷婷com| 国内精品久久久久久久久久清纯 | 99色在线观看 | 国产a级精品 | 免费在线观看污 | 国产在线欧美日韩 | 91成人精品一区在线播放 | 91精品国产99久久久久 | 又黄又爽又湿又无遮挡的在线视频 | 91成人黄色 | 国内精品久久久久久久久久 | 五月天中文字幕 | avhd高清在线谜片 | 黄色在线观看www | 人人干人人添 | 成人免费看视频 | 成年人av在线播放 | 91成人午夜 | 国产精品免费在线视频 | 99久久久久久久久久 | 中文在线字幕观看电影 | a特级毛片 | 中文字幕av网站 | 亚洲欧美日韩国产精品一区午夜 | 999视频精品 | 中文字幕资源在线 | 久久成人人人人精品欧 | 中文永久字幕 | 亚洲婷婷在线视频 | 国产精品欧美久久 | 日韩系列| 天天色天天艹 | 天天操天天干天天 | 精品少妇一区二区三区在线 | 99久久99久久精品国产片 | 91av视频| 国产精品久久99综合免费观看尤物 | 91看片在线观看 | av黄色在线播放 | 亚洲黄色一级电影 | 亚洲精品国偷自产在线91正片 | 91av视频在线观看免费 | 中文字幕在线观看网站 | 久久亚洲综合国产精品99麻豆的功能介绍 | 男女视频久久久 | 国产精品久久99 | 精品一区 在线 | 欧美一级片免费播放 | 久久五月婷婷丁香社区 | 激情欧美日韩一区二区 | 人人干人人草 | 日韩电影中文字幕在线观看 | 狠狠色丁香久久婷婷综合丁香 | 日韩系列在线观看 | 久久精品免费播放 | 在线观看av小说 | 九九热在线观看 | 九九涩涩av台湾日本热热 | 五月激情亚洲 | 激情小说 五月 | 欧美污污网站 | 亚洲视频免费在线观看 | 在线观看免费版高清版 | 久久精品在线 | 天天干天天做 | 人人澡人摸人人添学生av | 亚洲精品456在线播放乱码 | 日韩在线观看av | 午夜影视一区 | 91在线永久 | 国产成人精品一区二区三区福利 | 久久精品网站视频 | 亚洲第一成网站 | 色香蕉在线视频 | 黄色影院在线播放 | 在线观看视频一区二区 | 欧美日韩精品电影 | 国产精品一区二区三区电影 | 91视频在线看 | 欧美精品久久久久 | 99久久99久久精品国产片果冰 | 国产69久久久 | 99精品热视频只有精品10 | 91丨porny丨九色 | 黄网站污 | 免费在线观看av电影 | 91av视频网 | 国产一区二区精品久久 | 欧美日韩三级 | 亚洲黄色片在线 | 天天干天天干 | 91私密视频 | 九九热精 | 精品久久久久久亚洲综合网站 | 日韩免费av在线 | 国产日韩视频在线观看 | 国产a视频免费观看 | 日日碰狠狠躁久久躁综合网 | 精品久久国产精品 | 国产不卡精品 | 精品视频国产一区 | 日韩免费在线观看网站 | 91麻豆精品一区二区三区 | 国产精品 日韩 欧美 | www.888av| 在线天堂亚洲 | 久久久国产精品一区二区三区 | 丁香综合激情 | 欧美日韩国产精品一区二区三区 | 亚洲天堂精品视频 | 国产91学生粉嫩喷水 | 国产精品久久久久久妇 | 亚洲一区在线看 | 免费看久久久 | 国产亚洲精品久久久久久 | 美女视频免费一区二区 | 国产高清99 | 最近最新最好看中文视频 | 激情综合中文娱乐网 | 免费福利在线观看 | 国产三级在线播放 | 国产精品毛片一区视频播 | 成人精品国产 | 日本精品视频网站 | 国产精品欧美激情在线观看 | 欧美成人按摩 | 精品av在线播放 | 亚洲精品高清在线 | 久久99国产精品免费网站 | 狠狠色综合网站久久久久久久 | 高清日韩一区二区 | 天天摸天天舔 | 天天摸夜夜添 | av动态图片 | 日韩v在线 | 国产日产亚洲精华av | 色综合久久中文字幕综合网 | 亚洲一区尤物 | 一区二区三区三区在线 | 激情av网| 久久精品国产免费看久久精品 | 日韩毛片久久久 | 久久艹人人 | 亚洲视频免费在线 | 国产精品美女久久久久久久久 | 亚洲欧美视频在线观看 | 国产午夜不卡 | 一本大道久久精品懂色aⅴ 五月婷社区 | 在线观看色网 | 日韩aa视频 | 国产日韩视频在线 | 久久综合九色九九 | 日韩有码网站 | 免费手机黄色网址 | 91大神精品视频在线观看 | 国产成人精品午夜在线播放 | 天天色天天骑天天射 | 毛片随便看 | 国产在线专区 | 欧美精品久久久 | 99高清视频有精品视频 | 男女激情片在线观看 | 在线看片a | 国产精品va在线播放 | 久久资源在线 | 久草视频在线观 | 伊人宗合网 | 国产超碰在线观看 | 欧美精品一区二区性色 | 国产91在线看 | 欧美在线视频一区二区 | 丁香花在线观看视频在线 | 亚洲精品女| 国产精品麻豆99久久久久久 | 亚洲影音先锋 | 成人国产精品久久久久久亚洲 | 狠狠躁天天躁综合网 | 日本最大色倩网站www | 手机版av在线 | 最近中文字幕免费av | 久久久18 | 99中文字幕视频 | 久久久国产精品久久久 | 亚洲成人av在线电影 | 亚洲黄色免费在线看 | 亚洲一区黄色 | 在线视频欧美日韩 | 亚洲精品乱码白浆高清久久久久久 | 日韩中文字幕亚洲一区二区va在线 | 九九热在线视频 | 韩国在线视频一区 | 99爱这里只有精品 | 成人在线一区二区三区 | 国产视频69 | 欧美成人h版电影 | 一级精品视频在线观看宜春院 | 黄色毛片网站在线观看 | 91cn国产在线 | 毛片基地黄久久久久久天堂 | 欧美一级在线观看视频 | 中文字幕在线视频国产 | 国产亚洲欧美精品久久久久久 | 日韩电影中文字幕在线 | 91视频在线| 一区二区电影网 | 婷婷丁香激情 | 中文字幕一区二区三区在线播放 | 久久国产一二区 | 欧美日韩国产网站 | 日韩av在线影视 | 不卡的av中文字幕 | 国内外成人在线视频 | 最新免费av在线 | 9992tv成人免费看片 | av色图天堂网 | 国产精品亚洲精品 | 蜜臀av夜夜澡人人爽人人 | 日韩www在线 | 麻豆精品视频 | 精品久久久久久久久中文字幕 | 美女久久久久久久久久 | 国产精品久久久久影视 | 免费三级黄 | 久久久国产精品人人片99精片欧美一 | 91在线九色 | 亚洲视频免费在线观看 | 天天草视频 | 日韩免费小视频 | 一区 二区电影免费在线观看 | 日韩午夜高清 | 成人在线视频你懂的 | 久久无码精品一区二区三区 | 丁香激情五月 | 99免费看片 | 久久国产精品免费一区二区三区 | 国产精品免费视频观看 | 日本中文字幕网站 | 国产亚洲欧美精品久久久久久 | 欧美精品久久久久性色 |