python 單向鏈表實現

來源:互聯網
上載者:User

標籤:empty   next   指標   single   指定位置   als   self   長度   刪除   

class SingleNode(object):    """單鏈表的結點"""    def __init__(self,item):        # _item存放資料元素        self.item = item        # _next是下一個節點的標識        self.next = Noneclass SingleLinkList(object):    """單鏈表"""    def __init__(self):        self._head = None    def is_empty(self):        """判斷鏈表是否為空白"""        return self._head == None    def length(self):        """鏈表長度"""        # cur初始時指向前端節點        cur = self._head        count = 0        # 尾節點指向None,當未到達尾部時        while cur != None:            count += 1            # 將cur後移一個節點            cur = cur.next        return count    def travel(self):        """遍曆鏈表"""        cur = self._head        while cur != None:            print (cur.item)            cur = cur.next        print ("")    def add(self, item):        """頭部添加元素"""        # 先建立一個儲存item值的節點        node = SingleNode(item)        # 將新節點的連結域next指向前端節點,即_head指向的位置        node.next = self._head        # 將鏈表的頭_head指向新節點        self._head = node    def append(self, item):        """尾部添加元素"""        node = SingleNode(item)        # 先判斷鏈表是否為空白,若是空鏈表,則將_head指向新節點        if self.is_empty():            self._head = node        # 若不為空白,則找到尾部,將尾節點的next指向新節點        else:            cur = self._head            while cur.next != None:                cur = cur.next            cur.next = node    def insert(self, pos, item):            """指定位置添加元素"""            # 若指定位置pos為第一個元素之前,則執行頭部插入            if pos <= 0:                self.add(item)            # 若指定位置超過鏈表尾部,則執行尾部插入            elif pos > (self.length()-1):                self.append(item)            # 找到指定位置            else:                node = SingleNode(item)                count = 0                # pre用來指向指定位置pos的前一個位置pos-1,初始從前端節點開始移動到指定位置                pre = self._head                while count < (pos-1):                    count += 1                    pre = pre.next                # 先將新節點node的next指向插入位置的節點                node.next = pre.next                # 將插入位置的前一個節點的next指向新節點                pre.next = node    def remove(self,item):            """刪除節點"""            cur = self._head            pre = None            while cur != None:                # 找到了指定元素                if cur.item == item:                    # 如果第一個就是刪除的節點                    if not pre:                        # 將頭指標指向前端節點的後一個節點                        self._head = cur.next                    else:                        # 將刪除位元置前一個節點的next指向刪除位元置的後一個節點                        pre.next = cur.next                    break                else:                    # 繼續按鏈表後移節點                    pre = cur                    cur = cur.next    def search(self,item):        """鏈表尋找節點是否存在,並返回True或者False"""        cur = self._head        while cur != None:            if cur.item == item:                return True            cur = cur.next        return Falseif __name__ == "__main__":    ll = SingleLinkList()    ll.add(1)    ll.add(2)    ll.append(3)    ll.insert(2, 4)    print ("length:",ll.length())    ll.travel()    print (ll.search(3))    print (ll.search(5))    ll.remove(1)    print ("length:",ll.length())    ll.travel()

 

python 單向鏈表實現

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.