검지 offer--체인 테이블에서 중복된 결점 삭제--귀속 버전과 비귀속 버전

7791 단어 leetcode

체인 테이블에서 반복된 결점 삭제


정렬된 체인 테이블에 중복된 결점이 있습니다. 이 체인 테이블에서 중복된 결점을 삭제하십시오. 중복된 결점은 보존되지 않고 체인 헤더 바늘로 돌아갑니다.예를 들어 체인 테이블 1->2->3->3->4->4->5 처리 후 1->2->5

1: 비귀속 버전

class Solution:
    def deleteDuplication(self, pHead):
    	if not pHead or not pHead.next: return pHead
    	newHead = ListNode(-1)  #  
    	newHead.next = pHead
		p = pHead  #  
		pre = newHead  #  
		
		while p and p.next:
			if p.val == p.next.val:
				start = p #  , 
				p = p.next
				while p and p.next and p.val == p.next.val:
					p = p.next
				end = p  #  
				p = p.next
				if start == pHead and end.next is None: #  , 
					return None
				elif end.next is None: #  
					pre.next = None
				else:
					pre.next = end.next  #  start -> end 
			else:
				p = p.next
				pre = pre.next
		return newHead.next					

2: 반복 버전


다 쓴 후에 순환해서 하는 것이 매우 번거롭다는 것을 발견하고, 귀속 작법이 더욱 간결하다는 것을 발견하여 다시 썼다
class Solution:
    def deleteDuplication(self, pHead):
    	if not pHead or not pHead.next: #  
    		return pHead 
    	nextp = pHead.next
    	if nextp.val != pHead.val: #  , 
    		pHead.next = self.deleteDuplication(pHead.next)
    	else:
    		#  pHead 
    		while nextp and nextp.next and pHead.val == nextp.val:
    			nextp = nextp.next
    		if nextp.val == pHead.val: #  , 
    			return None
    		else:
    			pHead = self.deleteDuplication(nextp)
    	return pHead

좋은 웹페이지 즐겨찾기