class Node:
def __init__(self, dataval =None):
self.dataval = dataval
self.nextval = None
class LinkedList:
def __init__(self, headval =None):
self.headval = headval
def add(self, newNode):
# The linked list is empty
if(self.headval is None):
self.headval = newNode
else:
# Add to the end of the linked list
currentNode = self.headval
while currentNode is not None:
# Found the last element
if(currentNode.nextval is None):
currentNode.nextval = newNode
break
else:
currentNode = currentNode.nextval
def addBefore(self, valueToFind, newNode):
currentNode = self.headval
previousNode = None
while currentNode is not None:
# We found the element we will insert before
if (currentNode.dataval == valueToFind):
# Set our new node's next value to the current element
newNode.nextval = currentNode
# If we are inserting at the head position
if (previousNode is None):
self.headval = newNode
else:
# Change previous node's next to our new node
previousNode.nexval = newNode
return 0
# Update loop variables
previousNode = currentNode
currentNode = currentNode.nextval
return -1
def printClean(self):
currentNode = self.headval
while currentNode is not None:
print(currentNode.dataval, end='')
if(currentNode.nextval != None):
print("->", end='')
currentNode = currentNode.nextval
else:
return
testLinkedList = LinkedList()
testLinkedList.add(Node("Monday"))
testLinkedList.add(Node("Wednesday"))
testLinkedList.addBefore("Wednesday", Node("Tuesday"))
testLinkedList.printClean()
这里有一个修复程序,它改变了之前寻找下一个要插入的节点的方式,并单独处理任何头部插入。我还更改了变量和类属性的名称,以使事情更加清晰:
class Node:
def __init__(self, dataval=None):
self.dataval = dataval
self.nodepointer = None
class LinkedList:
def __init__(self, headnode=None):
self.headnode = headnode
因为每个节点都包含对下一个节点的引用,所以称之为NodePointer。这对这里有帮助(我认为):
def addBefore(self, valueToFind, newNode):
currentNode = self.headnode
if currentNode.dataval == valueToFind: #treat the front-end insertion as a
newNode.nodepointer = self.headnode #special case outside the while loop
self.headnode = newNode
return -1
while currentNode.nodepointer: #notice lose all the 'is None' syntax
# We found the element we will insert before *by looking ahead*
if currentNode.nodepointer.dataval == valueToFind:
# Set our new node's next *reference* to the current element's *next ref*
newNode.nodepointer = currentNode.nodepointer
currentNode.nodepointer = newNode #now link 'previous' to new Node
return -1
# Update loop variables
currentNode = currentNode.nodepointer #if this is None, while loop ends
return 0
我认为这更像是一个传统的C样式的链表。
我第一次使用链表,必须创建一个可以在双链表末尾插入节点的函数。到目前为止我 Node类按顺序接受要存储的值、要指向的下一个指针的值和上一个指针的值。每当我试图在这里插入节点时,我都会得到一个错误,说有一个未处理的异常,并且在写入位置0x00000008时有访问冲突。 我不完全确定这里出了什么问题,但我认为这与根据错误消息取消引用空指针有关。我真的很感激有人帮忙解决这个问题。
我的程序不断崩溃。我觉得我的逻辑有问题。请帮忙!谢谢
我在做一个程序,没有使用Java的内置链表类;我在从头开始做。除了编写一个将节点插入链表的特定位置的方法外,我在所有方面都取得了成功。 我有一个方法将一个特定的节点设置为“当前”节点。所以,例如,我有一个链表,看起来是这样的:猫-->狗-->使-->好-->宠物,“当前”等于2;这意味着“当前”节点是“狗”。 从这里开始,假设我想在“current”的位置插入一个新节点,它的info字段为AND。
我试图在C中的双向链表上做插入排序。在这种状态下,我的代码让我陷入了一个没有结束的循环,吐出了8和9。 有人能好心解释一下“插入排序”方法是如何设计的吗? 我的链表是设计包含头,上一个,下一个和一些数据。 到目前为止这是我的代码 我的希望破灭了。请帮忙。
给我一个指向排序双向链表的头节点的指针和一个插入到列表中的整数。我被告知创建一个节点并将其插入到列表中的适当位置,以保持其排序顺序。头节点可能是NULL。 样本输入 空,数据=2 NULL 样本输出 NULL NULL 我试过上面的问题。但我的程序因超时而终止。在下面的代码中,我做错了什么。假设节点类和主函数已经存在。非常感谢!!
分段故障发生在“电流->prev->next=temp”上。我试图打印地址以了解为什么会发生这种情况,并发现在输入中第一个节点的前一个元素总是指向NULL。有人能解释为什么会发生这种情况以及如何修复它吗?谢谢你。