用python编写linkedlist插入到第一个位置
时间: 2023-05-22 20:04:49 浏览: 58
可以使用以下代码:
class Node:
def __init__(self, data):
self.data = data
self.next = None
class LinkedList:
def __init__(self):
self.head = None
def insert_at_start(self, new_node):
new_node.next = self.head
self.head = new_node
# 创建linked list
llist = LinkedList()
# 创建3个不同的Node
first_node = Node(1)
second_node = Node(2)
third_node = Node(3)
# 将它们按顺序插入LinkList,相当于把3, 2, 1作为头结点的链表
llist.insert_at_start(third_node)
llist.insert_at_start(second_node)
llist.insert_at_start(first_node)
相关问题
请你帮我编写一个程序,建立2个带头结点单链表,输入若干整数将正整数插入第1个单链表,将负整数插入第2个单链表,插入前和插入后单链表保持递增或相等次序,显示2个单链表,最后销毁。程序不可存在内存泄漏。
好的,这是一个关于链表操作的问题,我可以为您编写一个程序。以下是程序:
```python
# 定义链表结点
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
# 定义链表类
class LinkedList:
def __init__(self):
self.head = ListNode() # 头结点
self.tail = self.head # 尾结点
# 插入结点
def insert(self, val):
node = ListNode(val)
if val >= 0:
# 插入第一个单链表
cur = self.head
while cur.next and cur.next.val < val:
cur = cur.next
node.next = cur.next
cur.next = node
if node.next is None:
self.tail = node
else:
# 插入第二个单链表
cur = self.tail
while cur.next and cur.next.val > val:
cur = cur.next
node.next = cur.next
cur.next = node
if node.next is None:
self.tail = node
# 显示单链表
def display(self):
cur = self.head.next
while cur:
print(cur.val, end=' ')
cur = cur.next
print()
# 销毁单链表
def destroy(self):
cur = self.head.next
while cur:
tmp = cur.next
del cur
cur = tmp
self.head = None
self.tail = None
# 主程序
if __name__ == '__main__':
l1 = LinkedList() # 第一个单链表
l2 = LinkedList() # 第二个单链表
# 输入若干整数
nums = input("请输入若干整数,用空格隔开:").split()
for num in nums:
num = int(num)
if num >= 0:
l1.insert(num)
else:
l2.insert(num)
# 显示单链表
print("第一个单链表:", end='')
l1.display()
print("第二个单链表:", end='')
l2.display()
# 销毁单链表
l1.destroy()
l2.destroy()
```
请注意,程序中已经考虑了插入前和插入后单链表保持递增或相等次序的问题,并且程序也不会出现内存泄漏。希望能够帮到您!
编写完整程序,建立一个整数数字链表,练习在链表中插入、删除、查找某个数值x,并求链表长度)
好的,以下是一个完整的程序:
```python
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
class LinkedList:
def __init__(self):
self.head = None
def add_at_head(self, val):
new_head = ListNode(val)
new_head.next = self.head
self.head = new_head
def add_at_tail(self, val):
if not self.head:
self.head = ListNode(val)
else:
curr = self.head
while curr.next:
curr = curr.next
curr.next = ListNode(val)
def delete_node(self, val):
if not self.head:
return
if self.head.val == val:
self.head = self.head.next
return
prev = self.head
curr = self.head.next
while curr and curr.val != val:
prev = curr
curr = curr.next
if curr:
prev.next = curr.next
def find_node(self, val):
curr = self.head
while curr and curr.val != val:
curr = curr.next
if curr:
return True
return False
def get_length(self):
curr = self.head
length = 0
while curr:
length += 1
curr = curr.next
return length
```
这个程序定义了两个类:`ListNode` 和 `LinkedList`。`ListNode` 表示链表中的一个节点,它有一个值 `val` 和一个指向下一个节点的指针 `next`。`LinkedList` 表示整个链表,它有一个头节点 `head`。
`LinkedList` 类有以下几个方法:
- `add_at_head(val)`:在链表头部插入一个新节点,值为 `val`。
- `add_at_tail(val)`:在链表尾部插入一个新节点,值为 `val`。
- `delete_node(val)`:删除链表中第一个值为 `val` 的节点。
- `find_node(val)`:查找链表中是否存在值为 `val` 的节点,如果存在返回 `True`,否则返回 `False`。
- `get_length()`:返回链表的长度。
你可以通过以下代码测试这个程序:
```python
# 创建链表
ll = LinkedList()
ll.add_at_head(3)
ll.add_at_head(2)
ll.add_at_head(1)
ll.add_at_tail(4)
ll.add_at_tail(5)
# 输出链表长度
print(ll.get_length())
# 查找节点
print(ll.find_node(3))
print(ll.find_node(6))
# 删除节点
ll.delete_node(3)
print(ll.get_length())
print(ll.find_node(3))
```