劍指offer(22) 刪除鍊錶中重複元素

2021-10-07 10:40:53 字數 2437 閱讀 3258

目錄

題型一(不保留重複節點)

c++:

python:

題型二(保留重複節點)

題目描述

在乙個排序的鍊錶中,存在重複的結點,請刪除該鍊錶中重複的結點,重複的結點不保留,返回煉表頭指標。 例如,鍊錶1->2->3->3->4->4->5 處理後為 1->2->5

思路分析

遍歷節點不為空時,當p節點和它下乙個節點的值相同時,q從p開始,q遍歷所有相同的節點。刪除從p到q,不保留重複節點,需要p之前設pre節點。具體刪除如下

pre->next=q->next;//刪除重複節點

p=q->next; //當前節點後移

建虛擬頭節點,方便統一處理

listnode* deleteduplication(listnode* phead)

pre->next=q->next;//刪除重複節點

p=q->next; //當前節點後移

}else

}return head->next;

}

struct listnode

};

#includeusing namespace std;

struct listnode

}; int main();

listnode * head = new listnode(a[0]);//空的頭節點

head->next = nullptr;

listnode * tail = head;

for(int i = 1 ; i < 5 ; i++)

while(head)

return 0;

}

#include using namespace std; 

//輸入有序重複原始煉表表,輸出返回不包含重複元素的鍊錶

//[1,2,2,2,3] [1,3]

struct listnode

};listnode* del(listnode* phead)

pre->next=q->next;//刪除重複節點

p=q->next; //當前節點後移

}else

}return head->next;

}//listnode* del(listnode* phead)

//// pre->next = cur;

// }

// else

//

// }

// return newhead->next;

//}int main();

listnode * head1=null;

listnode * head2=null;

listnode * head = new listnode(a[0]);//空的頭節點

head2=head;

head->next = nullptr;

listnode * tail = head;

for(int i = 1 ; i < 5 ; i++)

while(head)

head1=del(head2);

//cout

head1 = head1 -> next;

}return 0;

}

def deleteduplication(self, phead):

# write code here

head=listnode(-1)

head.next=phead

pre=head

p=head

q=head#可沒有

while p:

if p.next != none and p.val==p.next.val:

q=p.next

while q != none and q.next!=none and q.val==q.next.val:

q=q.next

pre.next=q.next

p=q.next

else:

pre=p

p=p.next

return head.next

題目描述給定乙個排序鍊錶,刪除所有重複的元素,使得每個元素只出現一次。

劍指 Offer22鍊錶 鍊錶中倒數第k個節點

題目 輸入乙個鍊錶,輸出該鍊錶中倒數第k個節點。為了符合大多數人的習慣,本題從1開始計數,即鍊錶的尾節點是倒數第1個節點。例如,乙個鍊錶有6個節點,從頭節點開始,它們的值依次是1 2 3 4 5 6。這個鍊錶的倒數第3個節點是值為4的節點。示例 給定乙個鍊錶 1 2 3 4 5,和 k 2.返回鍊錶...

Python劍指offer 刪除鍊錶中的重複節點

在乙個排序的鍊錶中,存在重複的結點,請刪除該鍊錶中重複的結點,重複的結點不保留,返回煉表頭指標。例如,鍊錶1 2 3 3 4 4 5 處理後為 1 2 5。時間限制 c c 1秒,其他語言2秒 空間限制 c c 32m,其他語言64m coding utf 8 class listnode def ...

劍指offer 22 鍊錶中倒數第K個結點

這道題的題目可以描述為 輸入乙個鍊錶,輸出該鍊錶中倒數第k個結點。typedef int datatype typedef struct listnode listnode 初始化 void listinit listnode ppfirst 這道題的普通解題思路分為三步 1.定義兩個指標forwa...