ลิงค์ลิสต์แบบสองทิศทาง

ลิงค์ลิสต์แบบสองทิศทาง () เป็นโครงสร้างของข้อมูลไว้ใน node เป็นลำดับ โดยแต่ละ node จะประกอบไปด้วยข้อมูลและ pointer 2 ตัว ชี้ไปยัง node ถัดไปและอีกหนึ่งตัวชี้ไปยัง node ถัดไปและอีกหนึ่งตัวชี้ไปยัง node ก่อนหน้า ยกเว้น node แรกที่ Pointer สำหรับชี้ไป node ก่อนหน้าจะชี้ไปที่ null และ node สุดท้ายที่ pointer สำหรับชี้ไป node ถัดไปจะชี้ไปที่ null ถ้านํา node มาเรียงต่อ ๆ กัน เป็นลำดับจะได้ doubly linked list ของข้อมูล n ตัวโดยจะกำหนดให้มี pointer อย่างน้อย 1 ตัวที่ชี้ไปยัง node ตัวแรกของ doubly linked list เสมอ

 ส่วนประกอบ 

 ส่วนเก็บข้อมูล (data) ใช้เก็บข้อมูลข่าวสารที่มีโครงสร้างข้อมูลเบื้องต้นหรือเรียบง่าย
 ส่วนการเชื่อมต่อถัดไป (Next) เป็นตัวชี้หรือพอยน์เตอร์เก็บค่าแอดเดรสใช้อ้างไปยังโหนดถัดไปในหน่วยความจำ
 ส่วนการเชื่อมต่อก่อนหน้า เป็นตัวชี้หรือพอยน์เตอร์เก็บค่าแอดเดรสใช้อ้างกลับไปยังโหนดก่อนหน้าในหน่วยความจำ (Prev)

 การนำไปใช้ 
class Node:
    # Constructor to create a new node
    def __init__(self, data):
        self.data = data
        self.next = None
        self.prev = None      
     # Class to create a Doubly Linked List
class DoublyLinkedList:
    # Constructor for empty Doubly Linked List
    def __init__(self):
        self.head = None

 การเพิ่ม Node 
2.1 การเพิ่ม Node ข้างหน้า
 def push(self, new_data):
        new_node = Node(new_data)
        new_node.next = self.head
        if self.head is not None:
            self.head.prev = new_node
        self.head = new_node

2.2 การเพิ่ม Node ข้างหลัง
 def append(self, new_data):
        new_node = Node(new_data)
        new_node.next = None
        if self.head is None:
            new_node.prev = None
            self.head = new_node
            return
        last = self.head
        while(last.next is not None):
            last = last.next
        last.next = new_node
        new_node.prev = last
        return

 การลบ Node 
 def delete(self, valueToDelete):
        currentNode = self.head
        previousNode = None
        while currentNode is not None:
            if currentNode.data == valueToDelete:
                if previousNode is None: 
                    newHead = currentNode.next
                    currentNode.next = None
                    return newHead # Deleted the head
                previousNode.next= currentNode.next
                return self.head
            previousNode = currentNode
            currentNode = currentNode.next
        return self.head# Value to delete was not found.

 การค้นหา Node 
 def search(self,data):
        node = self.head
        while (node and node.data != data):
            node = node.next
            return None
        return node.data 

 การแสดงผล 
 def printList(self):
        output = '['
        currentNode = self.head
        while currentNode is not None:
            output += str(currentNode.data)
            currentNode = currentNode.next
            if currentNode is not None:
                output += ', '
        output += ']'
        return output

 ดูเพิ่ม 

 []
 []